【问题标题】:Resetting table values through DateTime in Django在 Django 中通过 DateTime 重置表值
【发布时间】:2012-03-23 20:02:26
【问题描述】:

我正在尝试创建一个投票数据库,其中包含越来越多从未删除或重置的姓名。投票在上午进行,投票在 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

【问题讨论】:

    标签: django datetime reset


    【解决方案1】:

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

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

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

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

    这样您就可以看到任何一天的投票,而不仅仅是当天。你可以改变你的模型:

    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()
    

    【讨论】:

      【解决方案2】:

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

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

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

      如果您不想这样做,可以将 IntegerField 保留在那里,但只需添加日期字段。每次有人投票时,看看是否有餐厅投票支持该选择和当天是否已经;如果没有,则创建它(您可以为此使用 get_or_create())。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多