Django REST 框架:从模型中使用 max_length 的序列化程序

Django REST framework: Serializer to use max_length from model

我有模型

class Person(models.Model):
    name = models.CharField(max_length=254)

和相关的序列化器

class PersonSerializer(serializers.ModelSerializer):
    name = serializers.CharField(required=True, max_length=254)

    class Meta:
        model = Person
        fields = ('name',)

有没有办法让 CharField 从模型中自动检测 max_length 并在验证中使用它?

使用 Person._meta.get_field('name').max_length 可能是一种选择,但感觉在每个领域都使用起来有点麻烦。也许用自定义实现覆盖 CharField?或者还有其他选择吗?

如果您想以直接的方式将模型转换为序列化程序,可以使用 ModelSerializer。您可以使用 extra_kwargs field [drf-doc] 向序列化程序字段的构造函数注入额外的参数,因此:

class PersonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = ('name',)
        <strong>extra_kwargs</strong> = {
            'name': {'required': True}
        }