2012-03-23 6 views
0

決して削除またはリセットされない名前が増えている投票データベースを作成しようとしています。投票は午前中に行われ、投票は10:00頃に閉鎖されます。プロセスが終了した後、午後に各インスタンスの票を0に戻す別のビューを作成したいと思います。どうすればこれを達成できますか?毎日手動でこのビューにアクセスする必要がありますか、パラメータとしてDateTimeフィールドを使用して自動化することはできますか?私は古い結果をアーカイブするモデルを持っていますが、毎日投票モデルを再利用したいのです。DjangoでDateTimeを使用してテーブル値をリセットする

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でj pythonスクリプトを実行できます。他にも賢明なソリューションがいくつかありますが、ほとんどの場合、まずデザインを再考する必要があります。

編集:コードが質問に追加されました:各レストラン投票を一意の個人が1回投票したことを表し、totalVotes IntegerFieldを削除することをお勧めします。それぞれの投票キャストに新しいrestaurantVoteオブジェクトを作成します。 restaurantVoteに日時または日付フィールドを追加して、キャスト時にマークすることができます。投票を合計する場合は、指定した日の開始日と終了日の間に各選択肢の投票数を集計するか、日時フィールドの代わりに日付フィールドを使用している場合は、指定した日のみを集計するクエリを実行します。

これをしたくない場合は、IntegerFieldをそのままにしておくことができますが、日付フィールドを追加するだけです。誰かが票を集めるたびに、その選択肢と今日のレストランのレストランがあるかどうかを確認します。そうでなければ、それを作成します(これにはget_or_create()を使用できます)。

ちなみに、レストランレストランが個々のレストランの投票になったとすると、選択肢としてCharFieldの代わりに外部キー関係を使用できます。

+0

は、コードを追加しました問題の –

1

as andrew提案のデータをリセットするのが最適な方法ではない可能性があります。あなたが毎日のデータをリセットすることを心配する必要はないでしょう


  1. の保存だけで生の投票は多くの利点を提供することができます。 (cronジョブを更新する必要があります)

  2. あなたはどんな方法でデータを分析することもできます。

  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() 
関連する問題