在我的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函数,因为它是一个嵌套字段。
谢谢 !
创建自定义验证的正确方法是:
def validate_page(self, value):
if isinstance(value, int):
return value
return value
但它不会起作用。
您需要在Page serializer上覆盖to_internal函数:
class PageSerializer(serializers.ModelSerializer):
def to_internal_value(self, data):
return get_object_or_404(Page, pk=data)
...
class BookSerializer(serializers.ModelSerializer):
page = PageSerializer()