首页 > 解决方案 > 无法将 datetime.datetime 与 django 中的 datetime.date 进行比较

问题描述

我正在构建一个 BlogApp,但我遇到了一个错误。我尝试了很多次并尝试了很多答案,但没有解决我的错误。

def validate_date(date_added):
    if date_added < timezone.now().date():
        raise ValidationError("Date cannot be in the past")

class BlogPost(models.Model):
    post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
    post_title = models.CharField(max_length=500,default='')
    date_added = models.DateTimeField(null=True,default=timezone.now,validators=[validate_date])

这个函数的工作

此功能的工作是防止过去的日期作为输入。

问题

每当我尝试撰写新的博文并尝试添加过去的日期时,它就会一直显示给我:-

无法将 datetime.datetime 与 datetime.date 进行比较

我试过什么

我尝试了很多这样的答案,对我没有任何帮助。

我不知道这段代码有什么问题。

任何帮助,将不胜感激。

先感谢您

标签: pythondjangodjango-models

解决方案


您也应该将左操作数转换为日期,因此:

def validate_date(date_added):
    #               ↓ convert to a date 
    if date_added.date() < timezone.now().date():
        raise ValidationError('Date cannot be in the past')

或者如果时间戳不应该是过去的(日期和时间),那么我们比较datetime对象:

def validate_date(date_added):
    if date_added < timezone.now():
        raise ValidationError('Date cannot be in the past')

推荐阅读