Sun*_*ari 4 django django-models django-serializer django-rest-framework
我有两个序列化程序,"UserSerializer"和"CustomerSerializer"如下所示
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
return User.objects.create(**validated_data)
class Meta:
model = User
fields = '__all__'
class CustomerSerializer(serializers.ModelSerializer):
def create(self, validated_data):
return Customer.objects.create(**validated_data)
class Meta:
model = Customer
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
当我用POST请求命中用户api时,它调用UserSerializer的create方法来保存用户对象.
现在,在保存用户的同时,我也希望使用用户api保存客户对象.因此,对于UserSerializer的create方法,我想调用CustomerSerializer的create()方法以便保存客户对象.我怎么做 ?
你可以CustomerSerializer从create里面的方法中调用UserSerializer.例如
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
customer_serializer = CustomerSerializer(validated_data.get('customer'))
customer_serializer.save()
return User.objects.create(**validated_data)
class Meta:
model = User
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
@Edwin ...解决方案是完美的,只是我在数据字典中做了一些更改并将其发送到“CustomerSerializer”,如下所示,它开始工作。感谢您的帮助,下面的代码现在对我有用。
class UserSerializer(serializers.ModelSerializer):
def get_serializer_context(self):
return self.context['request'].data
def create(self, validated_data):
request_data = dict(self.get_serializer_context())
cust_req_data = {'first_name':request_data['first_name'][0],
'last_name':request_data['last_name'][0],
'email':request_data['email'][0]
}
customer_serializer = CustomerSerializer(data=cust_req_data)
if customer_serializer.is_valid():
customer_serializer.save()
return User.objects.create(**validated_data)
class Meta:
model = User
fields = '__all__'
class CustomerSerializer(serializers.ModelSerializer):
def create(self, validated_data):
return Customer.objects.create(**validated_data)
class Meta:
model = Customer
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
另外,“if customer_serializer.is_valid():”在使用 CustomerSerializer 保存对象之前需要此条件
我添加了“数据”,它是我需要验证我的客户数据字段的字典,
因为正如我之前所解释的,这是 POST 请求,我正在发送一些使用 UserSerializer 存储用户所需的数据,以及使用一个用户 api 本身使用 CustomerSerializer 存储客户所需的一些数据。
所以“get_serializer_context”方法给出了整个发布请求数据,我只得到保存客户所需的那些字段,并且我已将该字典作为参数传递给 CustomerSerializer
“customer_serializer = CustomerSerializer(数据=cust_req_data)”
这对我有用。
| 归档时间: |
|
| 查看次数: |
8955 次 |
| 最近记录: |