当前位置: 首页 > 知识库问答 >
问题:

为什么序列化程序字段不能是可选的?

任元青
2023-03-14

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

如果我没有在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

共有1个答案

柴瀚昂
2023-03-14

在创建方法中,请执行以下操作:

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
 类似资料:
  • 问题内容: 如下代码: 引发以下异常: 我猜内部类具有一个允许对其私有访问的字段和方法的字段。声明内部类static 可以解决它,但是如果需要此访问权限怎么办?有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过引用外部类? 编辑:例如,仅在序列化之前才需要访问外部类。好的,编译器不知道这一点,但是我认为这就是关键字存在的原因。 问题答案: 如果InnerClass需要此访问权限怎

  • 我试图在Java中序列化,但在运行我的程序时,我收到一个。 查看类,我注意到它没有实现。 为什么不实现?

  • 如果接口只是一个标记接口,用于在 java 中传递有关类的某种元数据 - 我有点困惑: 在阅读了java的序列化算法(元数据从下到上,然后从上到下的实际实例数据)的过程之后,我无法真正理解哪些数据不能通过该算法进行处理。 简而言之: 哪些数据可能导致? 我怎么知道我不应该为我的类添加子句?

  • 如果我有一个可序列化的类, } 当我使用以下消息构建findBugs时,会显示此消息: 这个可序列化类定义了一个非原语实例字段,它既不是瞬态的、可序列化的,也不是java的。并且似乎没有实现可外部化的接口或readObject()和writeObject()方法。如果此字段中存储了不可序列化的对象,则此类的对象将无法正确反序列化。 田野应该是什么才不会看起来像虫子?

  • 问题内容: 我有一个具有可选字段的对象。我以这种方式定义了我的序列化器: 我认为 如果不存在,可以绕过该字段。但是,在文档中提到这会影响反序列化而不是序列化。 我收到以下错误: 当我尝试访问序列化实例时,这正在发生。(这是否意味着反序列化导致了这一问题?) 对于没有的实例会发生这种情况。如果我从序列化程序类中忽略它,则可以正常工作。 如何正确执行此操作?即,使用可选字段序列化对象。 问题答案: 序

  • 问题内容: 我正在使用JavaScript将对象序列化为JSON字符串, 我注意到只有可枚举的对象属性才被序列化: [ 笔 ] 我想知道为什么会这样?我已经通过搜索MDN页面中,json2解析器文档。我找不到任何地方记录此行为。 我怀疑这是使用仅通过[[enumerable]]属性的循环(至少在情况下)的结果。可以使用类似的方法同时返回可枚举和不可枚举的属性。不过,这可能会导致序列化(由于反序列化