从rest_framework.serializer.Field中的django.db.models.Field继承help_text

时间:2015-09-16 13:49:45

标签: python django django-rest-framework

让我们考虑

models.py

class Foo(models.Model):
    ...
    bar = models.IntegerField(help_text='This is bar')
    baz = models.IntegerField(help_text='This is baz')

serializers.py

class FooSerializer(serializers.ModelSerializer):
    bar = serializers.IntegerField(min_value=0, max_value=9)

    class Meta:
        model = Foo
        fields = ('bar', 'baz')

在此示例中,FooSerializer有两个字段:

  • bar serializers.IntegerField(min_value=0, max_value=9)
  • baz serializers.IntegerField(label='This is baz')。标签自动从help_text属性继承。

出于文档目的,我希望继承 help_text,即使我重新定义了该字段。在这种情况下,我必须,因为我需要最小值/最大值为bar。有办法吗?

1 个答案:

答案 0 :(得分:2)

要继承序列化程序中模型字段中定义的选项并添加一些额外选项,您需要使用extra_kwargs选项。

您需要在序列化程序的extra_kwargs类中定义字典Meta。这将允许您在字段上指定任意其他关键字参数。然后,您不需要在序列化程序上明确声明该字段。

extra_kwargs字典的键将是您要为其添加一些其他参数的字段名称,其值将是包含这些其他关键字参数的字典。

serializers.py

class FooSerializer(serializers.ModelSerializer):

    class Meta:
        model = Foo
        fields = ('bar', 'baz')
        extra_kwargs = {
            'bar': { # add additional arguments for 'bar' field
                'min_value':0, # specify 'min_value' argument 
                'max_value': 9 # specify 'max_value' argument
            }
        }

除了继承模型中指定的默认参数外,上述方法还会将其他参数添加到模型字段中。