python - 序列化程序中嵌套字段的自定义验证器
问题描述
在我的BookSerializer中,我有一个嵌套字段页面:
class PageSerializer(serializers.ModelSerializer):
...
class BookSerializer(serializers.ModelSerializer):
page = PageSerializer()
并且页面字段验证器需要一个字典作为值。但我想要的是它也应该接受一个整数(页面的 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函数从未被调用,因为它是一个嵌套字段。
谢谢 !
解决方案
创建自定义验证的正确方法是:
def validate_page(self, value):
if isinstance(value, int):
return value
return value
但它不会工作。
您需要在 Page 序列化程序上覆盖 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()
推荐阅读
- php - 在 Laravel 上找不到类 - Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
- git - git repquest 中止“您对以下文件的本地更改将被合并覆盖”
- c++ - 遍历结构和类以查找价格最低的项目时出现问题。我的功能相反,它发现最昂贵
- python-3.x - 如何从其他文件写入fastq文件
- c# - 使用 PdfiumViewer 更改 HardMarginX 以打印 PDF 文件
- python - 在beautifulsoup中提取类中的类
- python - 在 Python 中解析没有“根”节点的 XML 文件
- matlab - 使用 Octave/Matlab 求解具有嵌入式非微分方程的微分方程组(见图)
- java - 将以前拍摄的屏幕截图与使用 Robot 类的新屏幕截图进行比较
- wordpress - ubuntu 服务器上的 wordpress 无法显示上传的图片