当"许多"为 True 时,"验证者"关键字参数不起作用?


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,
)
# ...

我正在使用PrimaryKeyRelatedFieldmany=True,并且还需要(独立(验证该字段。但似乎在调用OrderAddSerializer.is_valid()时没有调用validate_number_of_product.这是 DRF 的限制还是因为我使用不当?

many=True的行为与您假设的行为不同。 它在后台创建一个ListSerializer来处理列表部分,并将每个实例委托给"初始"序列化程序。

您需要确保将验证器提供给ListSerializer而不是OrderAddSerializer

该文档介绍了如何自定义ListSerializer初始化。正如您在源代码中看到的,验证器通过LIST_SERIALIZER_KWARGS从 init 中过滤掉。

最新更新