Django 序列化程序中的对象级验证无法识别函数

object-level validation in django serializers does not recognize function

class serializer_blahblah(serializers.ModelSerializer):
    """Serializer for ProfileUsefulRecommendations."""

    profile_id = serializers.UUIDField()
    recommendation_id = serializers.UUIDField()

    class Meta:
        """Meta class."""

        fields = (
            "id",
            "profile_id",
    ...

此序列化程序一切正常,但我决定添加对象级验证
这是发生的事情:

    def validate(self, data):
        recommendation_id = str(data["recommendation_id"])
        print("recommendation: ", recommendation_id)
        validate_recommendation_id(recommendation_id=recommendation_id)
        print(validate_recommendation_id(recommendation_id=recommendation_id))
        return data

打印出来:

recommendation:  3a232d0d-0705-4775-8bae-0e2f3d69c96c

连函数都不识别....

但是,如果我在单个字段序列化程序中使用完全相同的函数,则一切顺利。但很快我需要它作为对象级别

添加函数代码:

def validate_recommendation_id(recommendation_id):
    try:
        Recommendation.objects.get(id=recommendation_id)
    except Recommendation.DoesNotExist as exception:
        raise serializers.ValidationError(
            {f"{recommendation_id}": "does not exist"}
        ) from exception
    return recommendation_id

这就是您为每个字段添加验证的方式。

class serializer_blahblah(serializers.ModelSerializer):
    recommendation_id = serializers.UUIDField()

    def validate_recommendation_id(self, recommendation_id):
        return recommendation_id

您不在 validate 方法中调用它。

实际上,伙计们,我已经想出了这样的解决方案。 我定义了

而不是验证函数
Class CheckIfObjectHasId(queryset, lookup_object)

后来我在序列化程序中调用了它:

class serializer_blahblah(serializers.ModelSerializer):
    """Serializer for ProfileUsefulRecommendations."""

    profile_id = serializers.UUIDField(
        validators=[
             CheckIfObjectHasId(queryset=Profile.object.all(), lookup_object="id"
        ]
    )