-1

所以,我对 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 ((

4

1 回答 1

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就足够了。此外,如果您不关心时间,您可以直接转换DateTimeFieldDateField,让您只比较日期:

created = models.DateField (editable=False)
...
...
last_post_day = self.post_set.all()[-1]
return last_post_day >= datetime.date.today()
于 2013-09-18T14:29:38.240 回答