Django-完全覆盖模型字段的验证

时间:2018-08-18 15:36:22

标签: django django-models django-validation

我有一个模型,该模型通过表单获取日期时间,将其转换为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()

0 个答案:

没有答案