使用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'
,工作流程是:
- 創建數據庫
- python manage.py syncdb
- 對問題回答「no」您剛剛安裝了Django的身份驗證系統,這意味着您沒有任何超級用戶定義。你想現在創建一個嗎? (是/否)
- 從夾具1(一個或多個)
- 蟒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'
完整的堆棧跟蹤在哪裏? – borges
我已經執行了具有追溯選項的createsuperuser:我已經包含上面的結果。 – chirale
你在你的ptoject中使用多個數據庫嗎? – OrPo