【问题标题】: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 等,我不想重新定义它。

标签: python django django-rest-framework django-serializer


【解决方案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'},
    }

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多