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