每天只有一个帖子许可

时间:2013-09-18 13:08:45

标签: python django

所以,我对DateTimeField数据非常了解,我将非常感谢您的帮助。任务是为用户添加一天只创建一个帖子的功能。我有一个上一篇文章的日期,现在我应该在今天的日期检查它并获得许可或不获取。

我如何检查datetimefield数据是今天的日期?

所以让我们看看代码。出了点问题:

class Board (models.Model):

    @property
    def pub_allowed(self):
       try:
           last_post_day = self.post_set.all()[self.post_set.count() - 1].created
           if last_post_day == utc.localize(datetime.datetime.today()):
                return False

           return True

       except Post.DoesNotExist:
           return True

class Post (models.Model):
    title = models.CharField (max_length=30)
    description = models.CharField (max_length=120)
    created = models.DateTimeField (editable=False)
    board = models.ForeignKey (Board)

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = datetime.datetime.today()

        return super(Post, self).save(*args, **kwargs)

现在总是返回True((

1 个答案:

答案 0 :(得分:0)

第一个建议:

created = models.DateTimeField (editable=False, auto_now_add=True)

使用auto_now_add逻辑,您可以避免编写自己的自定义save()方法

第二

last_post_day = self.post_set.all()[self.post_set.count() - 1].created
....

这也会检查时间,这不是你想要的,因为你需要在完全不同的一天。您可以将其重写为:

last_post_day = self.post_set.all()[-1].created.day
return last_post_day >= utc.localize(datetime.datetime.today()).day

当你改变月份时,这当然不会是完美的,但是稍微调整以检查Date值而不是DateTime就足够了。此外,如果您不关心时间,可以直接将DateTimeField转换为DateField,以便您只比较日期:

created = models.DateField (editable=False)
...
...
last_post_day = self.post_set.all()[-1]
return last_post_day >= datetime.date.today()