在我的 BookSerializer 中,我有一个嵌套字段页面:
class PageSerializer(serializers.ModelSerializer):
...
class BookSerializer(serializers.ModelSerializer):
page = PageSerializer()
并且页面字段验证程序需要字典作为值。但我想要的是它也应该接受一个整数(页面的id)。所以在 BookSerializer 中,我尝试覆盖页面字段的验证函数,但它不起作用:
class BookSerializer(serializers.ModelSerializer):
page = PageSerializer()
def validate_page(self, value):
if isinstance(value, int):
return value
# if value is not an integer, reuse the default validator
# but django said that validate_page is not a function
return super().validate_page()
似乎永远不会调用 validate_page 函数,因为它是一个嵌套字段。
谢谢!
答案 0 :(得分:0)
Correct way to create custom validation is:
def validate_page(self, value):
if isinstance(value, int):
return value
return value
But it won't be working.
You need override to_internal function on Page serializer:
class PageSerializer(serializers.ModelSerializer):
def to_internal_value(self, data):
return get_object_or_404(Page, pk=data)
...
class BookSerializer(serializers.ModelSerializer):
page = PageSerializer()