作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
def validate_number_of_product(products):
if len(products) > 1:
# this may be temporary
raise ValidationError(_('Too many products.'))
class OrderAddSerializer(serializers.ModelSerializer):
products = serializers.PrimaryKeyRelatedField(
queryset=Product.objects.filter(sold=False),
write_only=True,
validators=[validate_number_of_product],
many=True, allow_empty=False,
)
# ...
我将 PrimaryKeyRelatedField
与 many=True
一起使用,并且还需要(独立)验证该字段。但是在调用OrderAddSerializer.is_valid()
的时候好像没有调用validate_number_of_product
。这是 DRF 的限制还是因为我使用不当?
最佳答案
many=True
的行为与您假设的不同。它在后台创建一个 ListSerializer
来处理列表部分,并将每个实例委托(delegate)给“初始”序列化程序。
您需要确保将验证器提供给 ListSerializer
而不是 OrderAddSerializer
。
documentation解释了如何自定义 ListSerializer
初始化。正如您在 the source 中看到的那样,验证器通过 LIST_SERIALIZER_KWARGS
从 init 中过滤掉.
关于django - 当 `validators` 为真时,`many` 关键字参数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45901232/
我是一名优秀的程序员,十分优秀!