首页 > 解决方案 > 如何使用 django 序列化程序验证大写字段

问题描述

我正在编写 API,并且在调试时注意到以下错误。以下代码不验证状态字段

class DocumentSalesforceSerializer(serializers.Serializer):
    AccountId = serializers.CharField(required=True)
    ContactId = serializers.CharField(required=True)
    Status = serializers.CharField(required=True)
    StartDate = serializers.CharField(required=True)
    EndDate = serializers.CharField(required=True, allow_blank=True)
    Subject = serializers.CharField(required=True)

    def validate_status(self, Status):
        if Status not in ("New", "In Progress", "On Hold", "Completed", "Closed", "Cannot Complete", "Canceled"):
            raise serializers.ValidationError("Invalid Status")
        return Status

但是,当我像这样将“状态”一词更改为“状态”时:

class DocumentSalesforceSerializer(serializers.Serializer):
    AccountId = serializers.CharField(required=True)
    ContactId = serializers.CharField(required=True)
    status = serializers.CharField(required=True)
    StartDate = serializers.CharField(required=True)
    EndDate = serializers.CharField(required=True, allow_blank=True)
    Subject = serializers.CharField(required=True)

    def validate_status(self, status):
        if status not in ("New", "In Progress", "On Hold", "Completed", "Closed", "Cannot Complete", "Canceled"):
            raise serializers.ValidationError("Invalid Status")
        return status

一切正常。谁能告诉我为什么它会这样工作,我该如何验证“状态”大写字段?谢谢

标签: pythondjango

解决方案


以下代码不验证状态字段。

它期望验证器被命名为,因此也是大写的:validate_StatusS

class DocumentSalesforceSerializer(serializers.Serializer):
    AccountId = serializers.CharField(required=True)
    ContactId = serializers.CharField(required=True)
    Status = serializers.CharField(required=True)
    StartDate = serializers.CharField(required=True)
    EndDate = serializers.CharField(required=True, allow_blank=True)
    Subject = serializers.CharField(required=True)

    def validate_Status(self, Status):
        if Status not in ("New", "In Progress", "On Hold", "Completed", "Closed", "Cannot Complete", "Canceled"):
            raise serializers.ValidationError("Invalid Status")
        return Status

推荐阅读