Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django rest嵌套序列化程序中使字段可选_Python_Json_Django_Django Rest Framework - Fatal编程技术网

Python 如何在django rest嵌套序列化程序中使字段可选

Python 如何在django rest嵌套序列化程序中使字段可选,python,json,django,django-rest-framework,Python,Json,Django,Django Rest Framework,我有这个密码 # Models class Parent(models.Model): something = models.CharField(max_length=255) class Child1(models.Model): thing = models.BooleanField() parent = models.ForeignKey(Parent) # Serializers class Child1Serializer

我有这个密码

# Models

class Parent(models.Model):
        something = models.CharField(max_length=255)

class Child1(models.Model):
        thing = models.BooleanField()
        parent = models.ForeignKey(Parent)

    # Serializers

class Child1Serializer(BaseSerializer):

    class Meta:
        model = Child1
        fields = ('thing', 'parent')

class Child2Serializer(BaseSerializer):

    class Meta:
        model = Child2
        fields = ('thing', 'parent')

class ParentSerializer(BaseSerializer):
    sisters = Child1Serializer(many=True)
    cousins = Child2Serializer(many=True)
现在,当我在Child1中发布,然后在json中传递parent时,一切都正常了

但当我想编写父对象的嵌套序列化程序时,子对象也会自动创建

"sisters": [
   {
      "thing": "tom"
   }
],
"cousins": [
   {
      "thing": "mike"
   },
]
然后我不需要传递父对象,因为我将在create方法中手动分配

def create(self, validated_data):
    sisters = validated_data.pop('sisters')
    parent = Parent.objects.create(**validated_data)
    for obj in sisters:
        Child1.objects.create(parent=parent, **obj)
    return parent

问题是,当我发布父项时,我会得到一个验证错误,即在sister中,父项是必需的

您根本不需要嵌套序列化程序中的
父项
字段。它与发送到API的数据是冗余的。

尝试使用django智能选择在创建父项之前,是否从
验证的\u数据中弹出
表兄妹?@Anush不,这只是一个示例。你的意思是我不需要子项序列中的父项?没错。它与父项有关,不是吗?请注意,通过编写“Child1.objects.create(parent=parent,**obj)”您已经提供了父项。没有理由来自嵌套子序列化程序的obj也会带来它。另外,Python会抱怨有两次相同的参数。你是对的。但如果我发布父对象来创建子对象,那么您的观点是有效的。但如果我只发布子项,那么父项将不在验证数据中,因为如果我没有在字段中定义它,序列化程序将删除它,而不是您的代码所显示的(parent=parent.objects.create(**validated_data))