【问题标题】:Custom User model in Python with socialaccount使用社交帐户在 Python 中自定义用户模型
【发布时间】:2014-07-11 23:54:01
【问题描述】:

我想在 django 中创建一个有几个额外字段的用户模型。我试图按照建议这样做 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: 'user' 与模型 app_name.User 有关系,该模型要么尚未安装,要么是抽象的。 admin.logentry:'user' 与模型 app_name.User 有关系,该模型要么尚未安装,要么是抽象的。 auth.user:模型已被替换为尚未安装或抽象的“app_name.User”。 socialaccount.socialaccount: 'user' 与模型 app_name.User 有关系,该模型尚未安装或抽象。

我可能使用了错误的 app_name 吗?如果是这样,我在哪里可以找到 app_name? 如何让自定义用户使用社交帐户等?

【问题讨论】:

    标签: python django django-models


    【解决方案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'。同时,您需要将mysite.app1 添加到settings.py 的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/

    【讨论】:

    • 非常感谢您的回复——models.py 实际上在我的 mysite/ 文件夹中。这是错的吗?我应该在 mysite/ 文件夹中创建另一个 app1 文件夹吗?抱歉,这些物理文件夹是否在 python/django 的目录或项目结构中?
    • 我在原始回复中添加了一些关于 django 项目结构等的注释
    • 酷——我阅读了文档并添加了一个用户模块,syncdb 正常工作,我可以使用 facebook 登录,但在回调时,我收到“用户匹配查询不存在”的错误。 stackoverflow.com/questions/24066914/…
    猜你喜欢
    • 2020-08-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多