我有一个模型,该模型通过表单获取日期时间,将其转换为unix时间,并将其保存为小数。这可以通过模型的clean
方法来实现。问题在于clean
方法似乎提供了额外的验证,而不是覆盖基本验证(在这种情况下,“实际上是十进制吗?”。)
我有一个带有两个分支的if
语句。如果模型对此字段没有接收到任何值,它将保存当前时间戳。这可以正常工作。如果该字段不为空,则第二个分支应将datetime转换为时间戳并保存。问题在于,到了clean
方法时,它已经引发了验证错误,因为其他一些验证方法已经注意到输入是日期时间,而不是十进制。
模型:
class CompanyAnnouncement(models.Model):
class Meta:
ordering = ['publish_datetime']
verbose_name = 'Company Announcement'
verbose_name_plural = 'Company Announcements'
company = models.ForeignKey(Company, on_delete=models.CASCADE)
publish_datetime = models.DecimalField(decimal_places=6, max_digits=18, help_text='Leave blank to publish immediately')
title = models.CharField(max_length=100)
document = models.FileField(upload_to='company_announcements', help_text='', null=True, blank=True)
def clean(self):
if self.publish_datetime:
try:
self.publish_datetime = self.publish_datetime.timestamp()
except:
raise ValidationError(_("Invalid datetime."))
else:
self.publish_datetime = dt.now().timestamp()