2012-12-28 7 views
10

Was ist der richtige Weg, um Djangos Model.validate_unique zu überschreiben? Ich versuchte es zwingende und erhöhen meine eigene ValidationError, bekam aber diesen Fehler:Django: überschreiben Model.validate_unique

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

Antwort

21

Django erwartet Ihre validationerrors mit einem Wörterbuch instanziiert werden anstelle einer Zeichenfolge:

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.', 
         ], 
        } 
       ) 
Verwandte Themen