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
,还需要验证字段(独立)。但是在调用validate_number_of_product
时似乎没有调用OrderAddSerializer.is_valid()
。这是DRF的限制还是因为我使用不正确?
答案 0 :(得分:1)
many=True
与您的假设有不同的行为。
它在场景后面创建一个ListSerializer
来处理列表部分,并将每个实例委托给" initial"串行器。
您需要确保向ListSerializer
而不是OrderAddSerializer
提供验证器。
documentation说明了如何自定义ListSerializer
初始化。正如您在the source中看到的那样,验证程序通过LIST_SERIALIZER_KWARGS
从init中过滤掉。