使用socialaccount在Python中自定义用户模型

时间:2014-05-22 19:15:01

标签: python django django-models

我想创建一个在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等?

1 个答案:

答案 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/