Django: 如何重写unique_together的错误信息?

31 投票
7 回答
17811 浏览
提问于 2025-04-16 05:53

在一个模型的Meta类里,我定义了一个unique_together。这意味着在这个模型中,有些字段的组合必须是唯一的。我有一个基于这个模型的ModelForm。当我调用这个ModelForm的is_valid方法时,如果unique_together的验证失败,就会自动出现一个错误提示。这一切都很好。

现在我的问题是,我对默认的unique_together错误提示不太满意。我想要更改这个提示。我该怎么做呢?对于某个字段相关的错误,我可以通过设置字段参数上的error_messages来轻松做到。但unique_together是一个非字段错误,我该如何更改这个非字段错误的提示呢?

7 个回答

8

对于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."
            )
        ]

这里是原始的 来源

28

更新于2016年10月20日: 请查看jifeng-yin在下面给出的更好的答案,适用于Django 1.7及以上版本。

如果你想自定义错误信息,最简单的方法是重写你模型中的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)
51

自从Django 1.7版本开始,你可以这样做。

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.",
            }
        }

撰写回答