serializ中嵌套字段的自定义验证程序

2024-04-20 00:34:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的BookSerializer中,我有一个嵌套字段页面

class PageSerializer(serializers.ModelSerializer):
    ...

class BookSerializer(serializers.ModelSerializer):
    page = PageSerializer()

字段验证器需要一个字典作为值。但我想要的是它也应该接受一个整数(page的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()

似乎从未调用验证页面函数,因为它是一个嵌套字段。你知道吗

谢谢!你知道吗


Tags: returnif字典isvaluepagenot整数
1条回答
网友
1楼 · 发布于 2024-04-20 00:34:45

创建自定义验证的正确方法是:

def validate_page(self, value):
    if isinstance(value, int):
        return value
    return value

但它不会起作用。你知道吗

您需要重写页序列化程序上的内部函数:

class PageSerializer(serializers.ModelSerializer):
    def to_internal_value(self, data):
        return get_object_or_404(Page, pk=data)
    ...

class BookSerializer(serializers.ModelSerializer):
    page = PageSerializer()

相关问题 更多 >