2012-12-28 13 views
10

Jaki jest właściwy sposób nadpisania Modelu Django? Validate_unique? Próbowałem przesłanianie go i podnosząc własne ValidationError, ale mam ten błąd:Django: przesłanianie Model.validate_unique

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

Odpowiedz

21

Django oczekuje twoi ValidationErrors do wystąpienia ze słownikiem zamiast napisu:

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