Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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_Django_Django Rest Framework - Fatal编程技术网

Python 使用django rest框架跨嵌套序列化程序验证

Python 使用django rest框架跨嵌套序列化程序验证,python,django,django-rest-framework,Python,Django,Django Rest Framework,如果要使用嵌套序列化程序,但需要父级中的某个参数(取决于子级中的值),那么在必要时如何强制执行逻辑要求 例如: class ChildSerializer(serializers.ModelSerializer): foobar_attribute = serializers.ChoiceField( required=True, choices=foobar_choices, ) class ParentSerializer(ser

如果要使用嵌套序列化程序,但需要父级中的某个参数(取决于子级中的值),那么在必要时如何强制执行逻辑要求

例如:

class ChildSerializer(serializers.ModelSerializer):
     foobar_attribute = serializers.ChoiceField(
         required=True,
         choices=foobar_choices,
     )



class ParentSerializer(serializers.ModelSerializer):
     child = ChildSerializer(required=True)

     optional_attribute = serializers.CharField(
         required=False,
     )
只有当
foobar\u属性
是一个特定的选择时,才需要
optional\u属性
,但其他所有属性都是可选的。在
ParentSerializer
ChildSerializer
上抛出
validate
函数仅公开该序列化程序的属性,而不公开其他属性


如何在不创建行的情况下跨嵌套序列化程序执行验证(如果在
perform\u create
中执行验证,则会发生这种情况)

您可以覆盖
初始化函数

def __init__(self, instance=None, *args, **kwargs):
    super().__init__(instance, *args, **kwargs)
    if your_condition:
        self.fields['optional_attribute'].required = True

您还可以更改
可选属性
字段的任何属性

是否尝试覆盖
ParentSerializer
验证
方法?是,父项上的
validate
未显示子项的值您可以添加您尝试过的validate方法吗?
您的\u条件
是应该从输入数据中获取的有效条件。IMHO,最好在验证器内部实现验证逻辑或类似的东西