Django:如何覆盖唯一的一起错误消息?

2024-04-29 09:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

在模型的元类中,我一起定义一个唯一的。我有一个基于这个模型的模型。当我调用在此模型窗体上有效时,如果唯一性验证失败,将自动引发错误。一切都很好。

现在我的问题是我对默认的unique_together错误消息不满意。我想推翻它。我该怎么做?对于与字段相关的错误,我可以通过在字段参数上设置error_消息来轻松完成。但是唯一的一起是一个非字段错误。如何重写非字段错误消息?


Tags: 模型消息参数定义错误error窗体unique
3条回答

对于DRF序列化程序,您可以使用

from rest_framework import serializers


class SomeSerializer(serializers.ModelSerializer):


    class Meta:
        model = Some
        validators = [
            serializers.UniqueTogetherValidator(
                queryset=model.objects.all(),
                fields=('field1', 'field2'),
                message="Some custom message."
            )
        ]

这是原件source

你可以在Django 1.7中做this

from django.forms import ModelForm
from django.core.exceptions import NON_FIELD_ERRORS

class ArticleForm(ModelForm):
    class Meta:
        error_messages = {
            NON_FIELD_ERRORS: {
                'unique_together': "%(model_name)s's %(field_labels)s are not unique.",
            }
        }

更新2016/10/20:关于Django>;=1.7,请参见下面的jifeng-yin更好的答案

重写这些错误消息的最好方法可能是重写模型上的unique_error_message方法。Django调用此方法以在验证期间遇到唯一性问题时获取错误消息。

您只需处理您想要的特定案例,并让Django照常处理所有其他案例:

def unique_error_message(self, model_class, unique_check):
    if model_class == type(self) and unique_check == ('field1', 'field2'):
        return 'My custom error message'
    else:
        return super(Project, self).unique_error_message(model_class, unique_check)

相关问题 更多 >