我正在使用django-rest-framework并希望在将其保存到我的模型之前增加发布的数据,这通常是使用模型的干净方法实现的,如本例中的django docs所示: / p>
class Article(models.Model):
...
def clean(self):
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError(_('Draft entries may not have a publication date.'))
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.date.today()
不幸的是,django-rest-framework Serializer并不像标准的django Form一样调用模型的干净方法,那么我该如何实现呢?
答案 0 :(得分:3)
来自官方docs:
您需要注意的一个区别是.clean()方法不会作为序列化程序验证的一部分进行调用,就像使用ModelForm一样。使用序列化程序.validate()方法在需要时对传入数据执行最终验证步骤。
在某些情况下,您确实需要在模型.clean()方法中保留验证逻辑,而不能将其分隔为序列化程序.validate()。您可以通过在.validate()方法中显式实例化模型实例来实现。
def validate(self, attrs):
instance = ExampleModel(**attrs)
instance.clean()
return attrs