我想创建一个在django中有另外几个字段的User模型。我按照建议尝试这样做 https://stackoverflow.com/a/22696794/3426600创建自定义用户模型 在models.py
中from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
user_data = models.TextField(null=True)
在settings.py中
AUTH_USER_MODEL = 'app_name.User'
但是当我运行python manage.py syncdb
时我收到了错误:
CommandError:一个或多个模型未验证: account.emailaddress:'用户'与模型app_name.User有关系,该模型未安装或是抽象的。 admin.logentry:'用户'与模型app_name.User有关系,该模型未安装或是抽象的。 auth.user:模型已被换出' app_name.User'尚未安装或抽象的。 socialaccount.socialaccount:'用户'与模型app_name.User有关系,该模型未安装或是抽象的。
我可以使用错误的app_name吗?如果是这样,我在哪里可以找到app_name? 如何让自定义用户使用socialaccount等?
答案 0 :(得分:1)
假设您的项目结构如下所示,User(AbstractUser)
的代码位于 mysite / mysite / app1 / models.py 中:
mysite/ (root folder for the project, put it anywhere in your disk. Most developers have a workspace folder(s) in computer)
(other non-application things. E.g. a static/, README.md, ...)
manage.py
mysite/ (container for all applications. You can put applications directly under root folder, but not recommended)
__init__.py
settings.py
urls.py
wsgi.py
app1/ (each application resides in its own folder. You don't want to put all models in one models.py file or all views in one view.py file, right?)
__init__.py
models.py
views.py
......
然后 app_name 是 app1 ,即AUTH_USER_MODEL = 'app1.User'
。同时,您需要在settings.py中将mysite.app1
添加到 INSTALLED_APPS 中。这可能会解决您的CommandError问题。
添加说明:
每个应用程序,您可以将其视为项目的模块。应用程序的 app_name 是文件夹名称。如果您在一个应用程序中定义了模型,则必须将其添加到settings.py中的INSTALLED_APPS。
手动创建文件夹不是一个好方法。更推荐django-admin.py startapp
,因为它共同为应用程序创建了一些公共文件,例如 init .py,models.py,view.py,...
建议您浏览django快速入门指南,如果您还没有完成它:https://docs.djangoproject.com/en/dev/intro/tutorial01/