13

DjangoのModel.validate_uniqueをオーバーライドする正しい方法は何ですか? 私はそれをオーバーライドして自分の を上げようとしましたが、次のValidationErrorエラーが発生しました:

AttributeError: 'ValidationError' object has no attribute 'message_dict'
4

1 に答える 1

24

Django は ValidationErrors が文字列ではなく辞書でインスタンス化されることを期待しています:

from django.db.models import Model
from django.core.exceptions import ValidationError
from django.core.exceptions import NON_FIELD_ERRORS


class Person(Model):

    ...

    def validate_unique(self, *args, **kwargs):
        super(Person, self).validate_unique(*args, **kwargs)
        if not self.id:
            if self.__class__.objects.filter(...).exists():
                raise ValidationError(
                    {
                        NON_FIELD_ERRORS: [
                            'Person with same ... already exists.',
                        ],
                    }
                )
于 2012-12-28T20:47:58.507 に答える