Django-Rest-Framework 无法覆盖唯一的序列化程序 error_messages
Django-Rest-Framework can't override serializer unique error_messages
我有以下型号:
class PersonDiscount(models.Model):
user = models.OneToOneField('backend.Customer', related_name='discount', on_delete=models.CASCADE, error_messages={
'unique': _('A discount setting is already set up for this customer.')})
discount = models.IntegerField(default=0)
discount_auto = models.IntegerField(default=0)
auto = models.BooleanField(default=True)
class Meta:
ordering = ['-id']
以及模型的以下序列化程序:
class PersonDiscountPostSerializer(serializers.ModelSerializer):
class Meta:
model = PersonDiscount
fields = '__all__'
extra_kwargs = {
'user': {
'error_messages': {
'unique': _('A discount setting is already set up for this customer.')
}
}
}
当我尝试使用来自 api 的现有用户创建 PersonDiscount 实例时,我没有收到我在模型和序列化程序中设置的自定义错误消息。
{
"user": [
"This field must be unique."
]
}
我已经查阅了文档,但找不到任何其他方法来理解为什么覆盖 error_messages 没有得到应用。我也已经多次重启 django runserver
希望有人能帮我解决这个问题
您可以手动验证唯一性,如下所示:
class PersonDiscountPostSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(
required=True,
queryset=Customer.objects.all(),
)
def validate_user(self, value):
exists = PersonDiscount.objects.filter(user=value).exists()
if exists:
raise serializers.ValidationError("err msg")
return value
class Meta:
model = PersonDiscount
fields = '__all__'
我有以下型号:
class PersonDiscount(models.Model):
user = models.OneToOneField('backend.Customer', related_name='discount', on_delete=models.CASCADE, error_messages={
'unique': _('A discount setting is already set up for this customer.')})
discount = models.IntegerField(default=0)
discount_auto = models.IntegerField(default=0)
auto = models.BooleanField(default=True)
class Meta:
ordering = ['-id']
以及模型的以下序列化程序:
class PersonDiscountPostSerializer(serializers.ModelSerializer):
class Meta:
model = PersonDiscount
fields = '__all__'
extra_kwargs = {
'user': {
'error_messages': {
'unique': _('A discount setting is already set up for this customer.')
}
}
}
当我尝试使用来自 api 的现有用户创建 PersonDiscount 实例时,我没有收到我在模型和序列化程序中设置的自定义错误消息。
{
"user": [
"This field must be unique."
]
}
我已经查阅了文档,但找不到任何其他方法来理解为什么覆盖 error_messages 没有得到应用。我也已经多次重启 django runserver
希望有人能帮我解决这个问题
您可以手动验证唯一性,如下所示:
class PersonDiscountPostSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(
required=True,
queryset=Customer.objects.all(),
)
def validate_user(self, value):
exists = PersonDiscount.objects.filter(user=value).exists()
if exists:
raise serializers.ValidationError("err msg")
return value
class Meta:
model = PersonDiscount
fields = '__all__'