提问人:davidcesarino 提问时间:9/24/2023 更新时间:9/25/2023 访问量:26
Django:基于另一个 DateTimeField 验证 DateTimeField
Django: Validate DateTimeField based on another DateTimeField
问:
我想在相同的模式下验证基于另一个,如下所示:DateTimeField
DateTimeField
class Operation(models.Model):
machine = models.ForeignKey(Machine, on_delete=models.CASCADE)
start = models.DateTimeField(auto_now_add=True)
end = models.DateTimeField(
null=True,
blank=True,
validators=[
MinValueValidator(start)
]
)
我在开机自检时出现异常:TypeError
“datetime.datetime”和“DateTimeField”的实例之间不支持“<”
这些是变量:
一个 datetime.datetime(2023, 1, 10, 0, 25, 29, tzinfo=zoneinfo.区域信息(key='美国/Sao_Paulo'))
b <django.db.models.fields.DateTimeField: start>
self <django.core.validators.MinValueValidator 对象位于 0x104ded4d0>
我想我需要从字段中提取,但我似乎无法从模型验证器内部做到这一点。datetime.datetime
有什么提示吗?谢谢。
答:
0赞
davidcesarino
9/24/2023
#1
对不起,愚蠢的我在午夜后尝试事情。无论如何,我只是用过,它起作用了。clean
0赞
ClanEver
9/24/2023
#2
因为验证者无法在多个字段之间进行比较。在代码中,in 表示整个字段,而不是单个实例的实际值。start
MinValueValidator(start)
你需要 Model.clean()
class Operation(models.Model):
machine = models.ForeignKey(Machine, on_delete=models.CASCADE)
start = models.DateTimeField(auto_now_add=True)
end = models.DateTimeField(null=True, blank=True)
def clean(self):
super().clean()
if self.start and self.end:
if self.start > self.end:
raise ValidationError("End datetime must be greater than start datetime.")
我希望这会有所帮助。
评论
0赞
davidcesarino
9/25/2023
谢谢。是的,这就是为什么我在问完后几乎立即回答了自己的问题。有趣的是,我们如何搜索一个小时的答案,却在询问一分钟后才找到它。总是这样。
评论
clean