【问题标题】:Custom validator for nested field in serializer序列化程序中嵌套字段的自定义验证器
【发布时间】:2018-10-06 06:07:40
【问题描述】:

在我的 BookSerializer 中,我有一个嵌套字段 page:

class PageSerializer(serializers.ModelSerializer):
    ...

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

并且 page 字段验证器需要一个字典作为值。但我想要的是它也应该接受一个整数(页面的 id)。所以在 BookSerializer 中,我尝试覆盖页面字段的 validate 函数,但它不起作用:

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 函数,因为它是一个嵌套字段。

谢谢!

【问题讨论】:

    标签: python django validation django-rest-framework serialization


    【解决方案1】:

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

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

    但它不会工作。

    您需要在页面序列化程序上覆盖 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()
    

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 2016-12-10
      • 2018-02-20
      • 1970-01-01
      • 2017-03-10
      • 2018-07-06
      相关资源
      最近更新 更多