2012-12-17 11 views
7

Django 1.5'ten yeni Configurable user model'u kullanma (1, 5, 0, 'beta', 2) gerekli bir alanın yabancı bir anahtar ayarlamaya çalışırken manage.py createsuperuser çalışırken bu hatayı alıyorum: benim kullanıcı modeli için ihtiyaç değerlerle bir fixtures/initial_data.yaml ettik yanaDjango 1.5 yapılandırılabilir kullanıcı modelinde gerekli alan olarak yabancı anahtar diyorsun, diyoruz: AttributeError: 'NoneType' nesnesinin '_state' özniteliği yok

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

, iş akışı:

  1. oluştur veritabanı
  2. python manage.py syncdb
  3. sorusuna "hayır" cevabını verin Django'nun auth sistemini kurdunuz, yani tanımlı herhangi bir süper kullanıcınız yok demektir. Şimdi bir tane oluşturmak ister misiniz? (Evet/hayır)
  4. 1 fikstür (ler)
  5. piton manage.py createsuperuser dan 14.264 nesne (ler) Yüklü

Ben fikstürler alındıktan sonra superuser oluşturmaya çalışırken, bu da öyle Şehir modeli için boş bir veritabanı tablosundan kaynaklanan bir sorun değil. documentation dayalı

Kod alıntı:

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'] 

nasıl gerekli bir alan üzerinde benim kullanıcı modeli üzerinde çalışan yabancı anahtar alabilirim? Teşekkür ederim.

Düzenleme: manage.py createsuperuser --traceback den geri izleme: Bu düzeltmek emin, ama sadece eğlence için

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

Komple stacktrace nerede? – borges

+0

Traceback seçeneğiyle createuperuser çalıştırdım: Yukarıdaki sonucu ekledim. – chirale

+1

Ptoject'inizde birden fazla veritabanı kullanıyor musunuz? – OrPo

cevap

3

değil% 100, PermissionsMixin çakmak ve modelde kapalı is_superuser kapalı yank.

Belki de arka planda devam eden bir şey kontrol etme izni vardır - bunun olmaması gerekir, ancak bir şans verin.

Şüphem, hangi model izinlerinin uygulanması gerektiğini bulmaya çalışmaktan kaynaklanıyor.