我正在尝试掌握 django 和 South,但我似乎遇到了stale contenttype
问题 - 我无法在 SO 或 google 上找到解决方法。
所以,首先我在 django==1.6 上有一个简单的项目,在安装的应用程序上有以下内容:
INSTALLED_APPS = (
'django.contrib.auth',
'django_browserid', # Load after auth
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sitemaps',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'south',
)
AUTH_USER_MODEL = 'auth.User'
我对此运行 asyncdb
并且在此阶段不创建超级用户。
现在,我创建一个新应用程序loginapp
并创建AbstractUser
如下:
#loginapp/models.py
class MyUser(AbstractUser):
is_admin_enabled = models.BooleanField(default=True) # new field
并在我的 settings.py 上更改以下内容:
AUTH_USER_MODEL = "loginapp.MyUser"
现在,在登录应用程序上,我运行(我添加loginapp
到我的INSTALLED_APPS
字典):
python manage.py schemamigration loginapp --initial && python manage.py migrate loginapp
..到目前为止一切都很好 - 我可以看到南已经在我的数据库上创建了新的用户模型。
现在,我回去做一个syncdb
我的项目,我得到:
The following content types are stale and need to be deleted:
auth | user
Any objects related to these content types by a foreign key will also
be deleted. Are you sure you want to delete these content types?
If you're unsure, answer 'no'.
..我猜django意识到用户模型已经改变,默认模型现在已经过时了。我在这里尝试使用“是”,我看到数据库表仍然存在 - 大概是因为 syncdb 不会删除数据库表。
我如何首先避免上述问题?我只需要在我的数据库中定义的用户模型,loginapp
而不是数据库上的默认 django 用户模型 - 使用南。
非常感谢解决此问题的任何线索/方向。