如何在 DRF 中使字段可编辑=False

Pyt*_*ast 2 python django django-rest-framework

我有一个序列化器。我想限制更新字段。我该怎么做呢?

class ABCSerializer(serializers.ModelSerializer):
    class Meta:
        """Meta."""

        model = ModelA
        fields = ('colA', 'colB', 'colC',)
Run Code Online (Sandbox Code Playgroud)

colA是创建对象时的必填字段。但是,不应允许其更新。我怎样才能做到这一点??

mat*_*gan 8

您可以通过验证该字段在更新时未更改来使用 Django REST Frameworks字段级验证,如下所示:

from rest_framework.exceptions import ValidationError

class ABCSerializer(serializers.ModelSerializer):
    colA = serializers.CharField(max_length=100)

    def validate_colA(self, value):
        if self.instance and self.instance.colA != value:
            raise ValidationError("You may not edit colA")
        return value

    class Meta:
        """Meta."""

        model = ModelA
        fields = ('colA', 'colB', 'colC',)
Run Code Online (Sandbox Code Playgroud)

这将检查这是否是更新(通过检查序列化器上是否填充了实例),如果是,它将检查您是否对该字段进行了更改,如果有,它将抛出一个ValidationError. 这种方法的好处是,您可以保持视图代码与以前相同,并继续在序列化器中保留验证行为。