Django rest框架:通过额外的参数覆盖ModelSerializer中的create() [英] Django rest framework: override create() in ModelSerializer passing an extra parameter
问题描述
我正在寻找一种方法来适当地避开Django Rest Framework中ModelSerializer
序列化程序的默认.create()
方法,以处理额外的参数.
I am looking for a way to properly ovverride the default .create()
method of a ModelSerializer
serializer in Django Rest Framework for dealing with an extra parameter.
在我最初的Django模型中,我刚刚重写了用于管理extra
参数的default .save()
方法.现在.save()
也可以通过以下方式调用:.save(extra = 'foo')
.
In my original Django model I have just overridden the default.save()
method for managing an extra
param. Now .save()
can be called also in this way: .save(extra = 'foo')
.
我必须在该原始Django模型上创建一个ModelSerializer
映射:
I have to create a ModelSerializer
mapping on that original Django model:
from OriginalModels.models import OriginalModel
from rest_framework import serializers
class OriginalModelSerializer(serializers.ModelSerializer):
# model fields
class Meta:
model = OriginalModel
但是以这种方式,我无法将extra
参数传递给模型.save()
方法.
But in this way I can't pass the extra
param to the model .save()
method.
如何正确覆盖我的OriginalModelSerializer
类的.create()
方法,以(最终)考虑此extra
参数?
How can I properly override the .create()
method of my OriginalModelSerializer
class to take (eventually) this extra
param into account?
推荐答案
嗯.这可能不是一个完美的答案,因为我不知道您想如何传递此额外"信息(即,它是否是通常形式的额外字段,等等)
Hmm. this might not be the perfect answer given I don't know how you want to pass this "extra" in (ie. is it an extra field in a form normally, etc)
您可能想要做的只是将foo表示为序列化器上的一个字段.然后它将出现在create
的validated_data
中,然后您可以使create
做如下操作
What you'd probably want to do is just represent foo as a field on the serializer. Then it will be present in validated_data
in create
, then you can make create
do something like the following
def create(self, validated_data):
obj = OriginalModel.objects.create(**validated_data)
obj.save(foo=validated_data['foo'])
return obj
您可能想要查看create的默认实现,以了解它所做的其他一些事情(例如删除多对多关系等).
You'd probably want to look at the default implementation of create for some of the other things it does though (like remove many-to-many relationships, etc.).
这篇关于Django rest框架:通过额外的参数覆盖ModelSerializer中的create()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!