在使用Django Rest Framework保存之前,基于POST数据更新模型字段

时间:2018-01-28 14:26:15

标签: python django django-rest-framework

我正在使用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一样调用模型的干净方法,那么我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

来自官方docs

  

您需要注意的一个区别是.clean()方法不会作为序列化程序验证的一部分进行调用,就像使用ModelForm一样。使用序列化程序.validate()方法在需要时对传入数据执行最终验证步骤。

     

在某些情况下,您确实需要在模型.clean()方法中保留验证逻辑,而不能将其分隔为序列化程序.validate()。您可以通过在.validate()方法中显式实例化模型实例来实现。

def validate(self, attrs):
    instance = ExampleModel(**attrs)
    instance.clean()
    return attrs