【问题标题】:Why can't serializer fields be optional?为什么序列化器字段不能是可选的?
【发布时间】:2016-02-12 12:34:39
【问题描述】:

如果我有一个模型序列化程序,其中 db 模型中不需要 first_name 和 last_name(空白=True、null=True、默认=None),并且我选择提交可能包含或不包含“ first_name”或“last_name”字段,这些字段不应该存在于validated_data[]中,无论它们是否不是通过json请求提交的,因为它们列在序列化器字段中并且它们的默认值设置为None?

如果我没有在 json POST 请求中提交“first_name”或“last_name”,我会收到一个关键错误。

class UserCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = get_user_model()
        fields = ('id', 'email', 'first_name', 'last_name')
        read_only_fields = ('id',)

    def create(self, validated_data):
        user = get_user_model().objects.create(
            email=validated_data['email'],
            first_name=validated_data['first_name'],
            last_name=validated_data['last_name']
        )

        user.save()
        return user

【问题讨论】:

    标签: json django-rest-framework serialization


    【解决方案1】:

    在你的创建方法中做这样的事情:

    def create(self, validated_data):
        user = get_user_model().objects.create(
            email=validated_data['email'],
            first_name=validated_data.get('first_name',''),
            last_name=validated_data.get('last_name','')
        )
    
        user.save()
        return user
    

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 2013-05-26
      • 2014-08-28
      • 2020-02-02
      • 1970-01-01
      • 2012-12-05
      • 2010-12-11
      • 2016-10-14
      相关资源
      最近更新 更多