2012-12-17 17 views
7

使用Django 1.5中的新的Configurable user model(1,5,'beta',2)在運行manage.py createsuperuser嘗試設置必填字段的外鍵我得到這個錯誤:因爲我有一個fixtures/initial_data.yaml與我需要爲我的用戶模型值Django 1.5可配置用戶模型中的外鍵爲必填字段,createsuperuser說:AttributeError:'NoneType'對象沒有屬性'_state'

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

,工作流程是:

  1. 創建數據庫
  2. python manage.py syncdb
  3. 對問題回答「no」您剛剛安裝了Django的身份驗證系統,這意味着您沒有任何超級用戶定義。你想現在創建一個嗎? (是/否)
  4. 從夾具1(一個或多個)
  5. 蟒manage.py createsuperuser安裝14264(多個)對象

我嘗試創建超級用戶固定裝置導入後,所以這是這不是City模型的空數據庫表引起的問題。

代碼片段,基於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'] 

我怎樣才能獲得外鍵我的用戶模型工作的一個必填字段?謝謝。

編輯: 回溯從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

完整的堆棧跟蹤在哪裏? – borges

+0

我已經執行了具有追溯選項的createsuperuser:我已經包含上面的結果。 – chirale

+1

你在你的ptoject中使用多個數據庫嗎? – OrPo

回答

3

不是100%肯定,這將修復它,但只是踢,釘在PermissionsMixin和猛拉關is_superuser關你的模型。

也許有某種權限檢查的事情在後臺進行 - 授予它不應該發生,但給它一個鏡頭。

我懷疑來自它試圖嗅出它需要應用的模型權限的概念。

相關問題