Django Rest Framework:允许在父级或单独创建子模型

说我有一组嵌套的序列化器,如:

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字段(因为您同时创建了两个模型)。

是否有解决此问题的方法?我想同时为ParentChild创建方法,但是我似乎无法配置序列化程序来做到这一点。

编辑:

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')

zlzed888 回答:Django Rest Framework:允许在父级或单独创建子模型

您可以通过使用另一个序列化程序来实现所需的功能,如JPG在注释中所表示的。一种方法可能是:

Table B

在您的ChildViewSet中,您可以使用ChildSerializer,而在ParentSerializer中,您可以使用ParentChildSerializer。

本文链接:https://www.f2er.com/2963462.html

大家都在问