2012-03-23 24 views
0

我正在嘗試創建一個投票數據庫,其中不斷刪除或重置的數量不斷增加。投票在早上投出,投票在10:00左右關閉。我想要有一個單獨的視圖,在這個過程結束後,下午爲每個實例重新設置選項爲零。我該如何做到這一點?我是否必須每天手動訪問此視圖,還是可以使用DateTime字段作爲參數進行自動化?我有一個模型來歸檔舊結果,但我想每天重新使用投票模型。在Django中通過日期時間重置表值

class restuarant(models.Model): 
    name = models.CharField(max_length=50) 
    votes = models.IntegerField() 
    percent = models.DecimalField(max_digits=23, decimal_places=20) 
    def __unicode__(self): 
     return self.name 

class totalVotes(models.Model): 
    total = models.IntegerField() 

class restuarantVote(models.Model): 
    #voting model for statistic information 
    choice = models.CharField(max_length=50) 
    totalVotes = models.IntegerField() 
    created = models.DateField() 
    def __unicode__(self): 
     return self.choice 

回答

0

這種問題的最佳解決方案几乎總是消除完全重置的需要。如果您無法弄清楚如何在概念上做到這一點,請考慮在您的模型和應用程序中發佈更多詳細信息,以及「重置投票」的含義。

如果你絕對需要每天運行某種程序來清理你的數據庫,你可以寫一個python腳本並導入您的應用程序的設置和模型文件,然後在服務器上運行的cron thej Python腳本。還有其他一些太聰明的解決方案,但幾乎總是你應該首先重新考慮你的設計。

編輯:現在的代碼已被添加到一個問題:我建議你做的每個restaurantVote代表通過一個獨特的個體投單票,並刪除totalVotes IntegerField。爲每個投票創建一個新的restaurantVote對象。您可以向restaurantVote添加日期時間或日期字段以標記其投射時間。當您想要投票總數時,請執行查詢,以便在給定日期的開始日期和結束日期之間累計每個選項的投票數,或者如果您使用的是日期字段而不是日期時間字段,則只針對給定日期。

如果你不想做,你可以保持IntegerField上有,但只是添加日期字段。每次有人投票,看看是否有餐廳投票選擇和當天已經;如果沒有,然後創建它(您可能能夠使用get_or_create())。

順便說一句,如果restaurantVote應該是一票投爲個人的餐廳,那麼你可以使用一個ForeignKey關係,而不是一個CharField的選擇權。

+0

添加的代碼,你可以改變你的模型有問題 – 2012-03-23 20:26:52

1

安德魯建議重置數據可能不是最好的方法。
貯藏只是原始的投票可以提供許多好處:

  1. 你就不必再擔心每天重置數據。 (這可能需要一個cron作業來更新)

  2. ,你可以在任何你想要的方式analize數據。

  3. 更擴展。您可以構建更靈活的系統,假設您想要將用戶添加到投票中以跟蹤特定用戶喜歡什麼?

這樣你就可以看到投票的任何一天不只是當天。當一個人收到

new_vote = Vote(choice=the_choice) 
new_vote.save() 

然後拿到天票

class Vote(models.Model): 
    choice = models.CharField(max_length=50) 
    created = models.DateField(auto_now_add=True) 

整個一天,你可以只添加一個投票:

todays_count = Vote.objects.filter(choice=the_choice, created=date_obj_here).count()