说我有一组嵌套的序列化器,如:
class ChildSerializer(serializers.ModelSerializer):
class Meta:
model = models.Child
fields = ['id','name']
class ParentSerializer(serializers.ModelSerializer):
children = ChildSerializer(many=True)
class Meta:
model = models.Parent
fields = ['id','name','children']
def create(self,validated_data):
children = validated_data.pop('children')
parent = super().create(validated_data)
for child in children:
child['parent'] = parent
self.fields['children'].create(children)
return parent
如果我将有效载荷发送到ParentViewSet
:
payload = {
'name': 'parent','children': [
{
'name': 'child',}
],}
它可以很好地创建两个模型,但是如果我将以下负载发送到ChildViewSet
:
payload = {
'name': 'child','parent': parent.pk,}
它将失败,因为parent
序列化器Child
属性中未包含field
。如果包含该属性,则相反。第二个有效负载有效,但是第一个有效负载失败,因为您没有包括parent
字段(因为您同时创建了两个模型)。
是否有解决此问题的方法?我想同时为Parent
和Child
创建方法,但是我似乎无法配置序列化程序来做到这一点。
编辑:
models.py
class Parent(models.Model):
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
name = models.CharField(max_length=256)
class Child(models.Model):
id = models.UUIDField(primary_key=True,editable=False)
name = models.CharField(max_length=256)
parent = models.ForeignKey(Child,on_delete=models.CASCADE,related_name='children')