从子序列化程序Django Rest Framework覆盖序列化程序字段

时间:2020-06-10 11:41:21

标签: django-rest-framework django-serializer

假设我有两个串行器,UserSerializerEmployeeSerializer。员工扩展用户的位置。我想覆盖EmployeeSerializer在UserSerializer中当前声明的字段。

根据我的理解,您可以通过extra_kwargs实现此目的,但是对于我来说似乎不起作用,并且当我尝试将POST数据发送到服务器时仍然出现必填字段错误。

class UserSerializer(serializers.ModelSerializer):
    username = serializers.CharField(required=True, max_length=20, allow_blank=False, allow_null=False)

    class Meta:
        model = User
        fields = "__all__"


class EmployeeSerializer(UserSerializer):
    class Meta:
        model = User
        fields = "__all__"
        extra_kwargs = {
            'username': {'required': False}
        }

1 个答案:

答案 0 :(得分:0)

您已经从EmployeeSerializer扩展了UserSerializer,并在UserSerializer中明确声明username字段为必填True。因此,您无法在extra_kwargs字典中将其设置为required: False,实际上,它不能像Django rest框架文档所说的那样工作,

请记住,如果已在序列化程序类上明确声明了该字段,则extra_kwargs选项将被忽略。

检查this link以获取详尽的理解。