今天偶然发现了一件很奇怪的事。你知道吗
我创建了一个可以显示问题的最小项目/应用程序。我就是这样做的:
virtualenv venv
. ./ven/bin/activate
pip install django==1.6 # That's the one we're using
django-admin.py startproject bla
cd bla
chmod +x manage.py
./manage.py startapp bla_app
在bla/settings.py
中:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bla_app',
)
AUTH_USER_MODEL = 'bla_app.MyUser'
在bla_app/models.py
中:
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class MyUser(AbstractUser):
super_name = models.CharField(max_length=254, unique=True)
然后,我运行syncdb
命令:
./manage.py syncdb
它是按预期创建的。你知道吗
现在是棘手的部分。如果我更换型号.py并创建一个__init__.py
文件,其中包含:
from my_user import MyUser
(前面的models.py
作为my_user.py
移到models/
)
然后我得到这些错误:
$ ./manage.py syncdb
CommandError: One or more models did not validate:
admin.logentry: 'user' has a relation with model bla_app.MyUser, which has either not been installed or is abstract.
auth.user: Model has been swapped out for 'bla_app.MyUser' which has not been installed or is abstract.
你知道这是怎么回事吗?你知道吗
我找到了that,但我不确定它们是否相关
要将模型拆分为模块,必须提供app_label元选项。例如:
my_user.py
正如@petkostas所说,django1.7(issue 4470)中不需要它
看看this answer,它描述了这个过程。你知道吗
Django希望模型类在
models.py
本身中定义,而不是在子模块中定义。它将尝试创建一个models.MyUser
的实例,在您的例子中,它在Django的世界中并不存在,尽管您在my_user.py
中定义了它如果希望在单独的Python文件中定义每个模型,则需要创建型号.py手动导入它们的文件。如果你开始在这个应用程序中创建很多模型,那么这可能很难维护。你知道吗
在
models.py
相关问题 更多 >
编程相关推荐