2012-12-17 8 views
7

Używanie nowego Configurable user model z Django 1.5 (1, 5, 0, "beta", 2) otrzymuję ten błąd podczas uruchamiania manage.py createsuperuser próbuje ustawić klucz obcy z wymaganego pola:Klucz obcy jako wymagane pole w konfigurowalnym modelu użytkownika Django 1.5, createduperuser mówi: AttributeError: Obiekt "NoneType" nie ma atrybutu "_state"

AttributeError: 'NoneType' object has no attribute '_state'

odkąd się fixtures/initial_data.yaml z wartości potrzebne dla mojego modelu użytkownika, pracy jest:

  1. Tworzenie baza danych
  2. python manage.py syncdb
  3. Odpowiedz "no" na pytanie Właśnie zainstalowałeś system autoryzacyjny Django, co oznacza, że ​​nie masz zdefiniowanych żadnych superużytkowników. Czy chcesz go teraz utworzyć? (Tak/nie)
  4. zainstalowana 14264 obiekt (y) od 1 uchwytu (-ów)
  5. python manage.py createsuperuser

próby utworzenia superużytkownika po urządzenia są importowane, więc jest to nie jest to problem spowodowany pustą tabelą bazy danych dla modelu City.

fragment kodu, na podstawie documentation:

models.py

class City(models.Model): 
    city = models.CharField(max_length=70, help_text="City.") 
    state = models.CharField(max_length=2, help_text="State.") 
    class Meta: 
     ordering = ['city'] 
    def __unicode__(self): 
     return "%s (%s)" % (self.city, self.state) 

class PersonaManager(BaseUserManager): 
    [...] 
    def create_superuser(self, email, name, birthplace, password): 
     """ 
     Creates and saves a superuser with the given email, date of 
     birth and password. 
     """ 
     user = self.create_user(email, 
      password=password, 
      name=name, 
      birthplace=birthplace, 
     ) 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 

class Person(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
     db_index=True, 
    ) 
    name = models.CharField(max_length=60) 
    birthplace = models.ForeignKey('myapp.City', related_name="person_birthplace") 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = PersonaManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['name', 'birthplace'] 

Jak mogę uzyskać klucz obcy pracuje na moim modelu użytkownika w wymaganym zakresie? Dziękuję Ci.

Edit: Traceback z manage.py createsuperuser --traceback:

Traceback (most recent call last): 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/core/management/base.py", line 222, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/core/management/base.py", line 252, in execute 
    output = self.handle(*args, **options) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 112, in handle 
    user_data[field_name] = field.clean(raw_value, None) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 211, in clean 
    self.validate(value, model_instance) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 1014, in validate 
    using = router.db_for_read(model_instance.__class__, instance=model_instance) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/db/utils.py", line 142, in _route_db 
    return hints['instance']._state.db or DEFAULT_DB_ALIAS 
AttributeError: 'NoneType' object has no attribute '_state' 
AttributeError: 'NoneType' object has no attribute '_state' 
+1

Gdzie jest kompletny stacktrace? – borges

+0

Wykonałem polecenie createuperuser z opcją traceback: Zawarłem powyższy wynik. – chirale

+1

Czy używasz wielu baz danych w swoim module ptoject? – OrPo

Odpowiedz

3

Nie 100% pewien, że będzie to naprawić, ale tylko dla zabawy, hals na PermissionsMixin i szarpać wyłączyć is_superuser off modelu.

Być może w tle dzieje się coś w rodzaju sprawdzania uprawnień - przyznał, że to nie powinno się dziać, ale daj mu szansę.

Podejrzewam, że podejrzewam, że próbuje wykryć uprawnienia modelu, które musi zastosować.

Powiązane problemy