django序列化程序中的对象级验证无法识别函数
使用这个序列化程序,一切都非常完美,但是我决定添加对象级验证django序列化程序中的对象级验证无法识别函数,django,validation,django-rest-framework,django-serializer,Django,Validation,Django Rest Framework,Django Serializer,使用这个序列化程序,一切都非常完美,但是我决定添加对象级验证 发生的情况如下: class serializer_blahblah(serializers.ModelSerializer): """Serializer for ProfileUsefulRecommendations.""" profile_id = serializers.UUIDField() recommendation_id = ser
发生的情况如下:
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
你们不需要在
validate
方法中调用它。实际上,伙计们,我已经提出了这样的解决方案。
我定义了验证函数,而不是验证函数
class serializer_blahblah(serializers.ModelSerializer):
recommendation_id = serializers.UUIDField()
def validate_recommendation_id(self, recommendation_id):
return recommendation_id
后来我调用了序列化程序:
Class CheckIfObjectHasId(queryset, lookup_object)
请,您能添加函数的代码吗?正如我提到的那样,这种方法是有效的,但我需要在validation中使用它。我有两个ID,并且相信如果我创建每个内场函数,它将是冗余的,因此我相信validation()函数将继续。。。但是为什么它不调用函数呢?
recommunication\u id=serializers.UUIDField()
您显然只有一个id。我想我帮不了您,因为我不知道问题出在哪里。实际上,不,我有两个id。也可能你知道我可以在这里发布之前编辑代码,因此我删除了其他字段。
class serializer_blahblah(serializers.ModelSerializer):
"""Serializer for ProfileUsefulRecommendations."""
profile_id = serializers.UUIDField(
validators=[
CheckIfObjectHasId(queryset=Profile.object.all(), lookup_object="id"
]
)