通过Django中的DateTime重置表值

时间:2012-03-23 20:02:27

标签: django datetime reset

我正在尝试创建一个投票数据库,其中包含越来越多的名称,这些名称永远不会被删除或重置。投票在早上投票,投票在10:00左右结束。我希望有一个单独的视图,在过程结束后,在下午将每个实例的投票重置为零。我怎么能做到这一点?我是否必须每天手动访问此视图,还是可以使用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

2 个答案:

答案 0 :(得分:1)

正如安德鲁建议的那样,重置数据可能不是最好的方法 只存储原始投票可以带来许多好处:

  1. 您不必担心每天重置数据。 (可能需要更新cron作业)

  2. 您可以以任何方式分析数据。

  3. 它更具扩展性。您可以构建更灵活的系统,假设您想要将用户添加到投票中以跟踪特定用户喜欢的内容?

  4. 通过这种方式,您可以看到任何一天的投票,而不仅仅是当天。你可以改变你的模型:

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

    全天你可以在收到一票时加上投票

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

    然后获得投票日期:

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

答案 1 :(得分:0)

解决此类问题的最佳方法几乎总是消除完全重置的需要。如果您无法从概念上弄清楚如何做到这一点,请考虑在模型和应用程序上发布更多详细信息以及“重置投票”的含义。

如果您每天都需要运行某种流程来清理数据库,可以编写python脚本并导入应用程序的设置和模型文件,然后在服务器上使用cron运行j python脚本。还有一些其他太聪明的解决方案,但几乎总是你应该首先重新考虑你的设计。

编辑:现在已将代码添加到问题中:我建议您让每个restaurantVote代表由唯一个人投票的单一投票,并删除totalVotes IntegerField。为每个投票创建一个新的restaurantVote对象。您可以向restaurantVote添加日期时间或日期字段,以标记它何时被投射。如果您想要总票数,请执行查询以总计在给定日期的开始和结束之间的每个选项的投票数,或者仅在给定日期使用日期字段而不是日期时间字段。

如果您不想这样做,可以将IntegerField保留在那里,只需添加日期字段即可。每当有人投票时,看看是否有餐厅投票选择当天和当天;如果没有,那么创建它(你可能可以使用get_or_create())。

顺便说一句,如果restaurantVote应该是个别餐厅的投票,那么你可以使用外键关系而不是CharField来选择。