【问题标题】:Django Rest Framework ModelSerialzer field doesn't respect required=FalseDjango Rest Framework ModelSerialzer 字段不遵守 required=False
【发布时间】:2015-07-22 16:27:34
【问题描述】:

使用 django rest framework 3.1.1,我有以下序列化器:

class CommentSerializer(ContentSerializer):

    created_by = UserSerializer(required=False)
    content = serializers.PrimaryKeyRelatedField(queryset=Content.objects.all(), required=False)

    class Meta:
        model = Comment

虽然content 字段尊重required=False 参数,但created_by 不尊重,这会在UserSerializer 中给我一个“此字段是必需的”验证错误列表:

{"created_by":{"username":["This field is required."],"user_permissions":["This field is required."],"password":["This field is required."],"groups":["This field is required."],"profile_picture":["This field is required."]}}

根据documentation 部分“处理嵌套对象”,它演示了序列化程序的用法。

我尝试过的:

  • 我之前的 question 对此并尝试添加 get_validation_exclusions 并没有帮助,因为我相信它已经在此 issue 中参与。

  • 将 created_by 更改为 created_by = serializers.PrimaryKeyRelatedField(required=False) 有效,但这不是我想要的。

  • 在现有问题中的快速搜索显示我不是唯一遇到此问题的人: https://github.com/tomchristie/django-rest-framework/issues/2719

更新:

我已经创建了几个测试用例(请参阅 here),但无法复制该问题,看起来它只能通过 Ajax Post 发生。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    我在 created_by 字段中添加了read_only=True,现在它可以正常工作了。

    class CommentSerializer(ContentSerializer):
    
        created_by = UserSerializer(required=False, read_only=True)
        content = serializers.PrimaryKeyRelatedField(queryset=Content.objects.all(), required=False)
    
        class Meta:
            model = Comment
    

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2013-11-15
      • 2021-09-03
      • 2021-02-28
      • 2013-01-15
      相关资源
      最近更新 更多