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,最好在验证器内部实现验证逻辑或类似的东西