根据请求

时间:2015-09-04 09:20:48

标签: python django django-rest-framework

我正在使用Django Rest Framework 3.2。我有一个带有ForeignKey的模型“Report”到模型“Office”。

我想根据请求设置report.office

我就是这样做的(我不喜欢,因为它需要重复):

在我看来,我在GET或POST / PUT / PATCH请求之间有所区别,其中GET使用嵌套的Serializer表示,而POST / PUT / PATCH使用平面序列化表示。

然后我认为:

def perform_create(self, serializer):
    serializer.save(office=Office.objects.get_only_one_from_request(self.request))

并在我的FlatOfficeSerializer中:

def validate(self, attrs):
    if self.instance is not None:
        instance = self.instance
        instance_fields = instance._meta.local_fields
        for f in instance_fields:
            f = self.get_initial().get(f.name)
    else:
        instance = self.Meta.model(**attrs)
    request = self.context.get('request')
    instance.office = Office.objects.get_only_one_from_request(request)
    instance.clean()
    return attrs

很明显,那里有一个重复,虽然它有效但我不喜欢它。如果没有重复,验证将失败(当然)instance.clean(),它会调用模型的clean方法。我真的需要这个,因为我的业务逻辑在模型的清理和保存方法中。

0 个答案:

没有答案