在序列化程序中将继承字段更改为必需

Posted

技术标签:

【中文标题】在序列化程序中将继承字段更改为必需【英文标题】:Change inherit field to required in a Serializer 【发布时间】:2022-01-22 08:50:30 【问题描述】:

我有一个这样的序列化器:

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    field1 = serializers.CharField(required=False)
    field2 = serializers.IntegerField(required=False)
    field3 = serializers.BooleanField(required=False)
    ...

我想继承这个类,但是把field1改成required=True,我该怎么做?

我知道我可以像这样重新定义字段:

class MySerializer2(MySerializer):
    field1 = serializers.CharField(required=True)

但我不喜欢这样做。

【问题讨论】:

你为什么不想按照你的建议去做? @shivankgtm 我的字段还有其他参数,例如help_textdefault 等,我不想重新定义它。 【参考方案1】:

我现在解决这个问题的更好方法是更改​​序列化器__init__ 上的字段属性:

class MySerializer(serializers.Serializer):
    field1 = serializers.CharField(required=False)
    field2 = serializers.IntegerField(required=False)
    field3 = serializers.BooleanField(required=False)
    ...

    def __init__(self, instance=None, **kwargs):
        super().__init__(instance=instance, data=data, **kwargs)
        if hasattr(self,'update_fields'):
            to_update= self.update_fields
            for field in to_update:
                for attr, value in to_update[field].items():
                    setattr(self.fields[field], attr, value)

现在我只需要将update_fields 属性设置为我要修改的字段和属性,

class MySerializer2(MySerializer):
    update_fields = 
        'field1': 'required':True,
        'field2': 'help_text': 'New help text',
    

【讨论】:

以上是关于在序列化程序中将继承字段更改为必需的主要内容,如果未能解决你的问题,请参考以下文章

Django REST Framework 序列化程序字段必需=false

如何更改xml中的字段要求?

在 VB6 中将 DAO DBEngine DataTable 的列从 DataType dbInteger 更改为 dbLong

在.net core 的webapi项目中将对象序列化成json

如何在 PostgreSQL 11.1 中将现有列更改为身份

在 SwiftUI 中将选取器更改为文本字段