繁体   English   中英

在Django中扩展AbstractUser的正确方法?

[英]Correct way to extend AbstractUser in Django?

我正在尝试集成两个django应用程序,每个应用程序都有各自的身份验证。 为此,我尝试将AbstractUser而不是User子类化。 我正在关注PyBB文档Django#substituting_custom_model 我已经删除了所有应用程序中所有迁移文件,除了它们各自的init .py(包括从位于我的站点包中的PyBB库进行的迁移)。 我还将Mysql数据库更改为空白数据库以重新开始,并且我尝试对AbstractUser进行子类化,如下所示。

我的Models.py:

from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractUser

from django.db import models
class Student_User(models.Model):
    """
    Table to store accounts
    """
    su_student = models.OneToOneField(AbstractUser)

    USERNAME_FIELD = 'su_student'

    su_type = models.PositiveSmallIntegerField(db_column='su_type', default=0)
    su_access = models.TextField(db_column='su_access', default='')
    su_packs = models.TextField(db_column='su_packs', default='')

    REQUIRED_FIELDS = []

    def __unicode__(self):
        return str(self.su_student)

我的settings.py:

AUTH_USER_MODEL = "app.Student_User"
PYBB_PROFILE_RELATED_NAME = 'pybb_profile'

在为主应用程序运行makemigrations时,出现以下错误:

app.Student_User.su_student: (fields.E300) Field defines a relation with model 'AbstractUser', which is either not installed, or is abstract.

我如何在这里实现自己的目标?

PS:该应用程序与没有username_field或required_field的User一起使用onetoone正常工作。

PPS:我刚刚在contrib.auth.models中检查了AbstractUser模型,它具有class Meta: abstract = True 好的,那么它的摘要仍然如何解决? 我只需要一个登录名,目前,我的网站的两个部分虽然通过url连接,但要求单独的登录名,并且不会检测到彼此的登录名。 我该怎么办?

您不能与抽象模型建立一对一的关系。 根据定义,抽象模型永远不会实际实例化。

应该假定AbstractUser是继承的 您的结构应为:

class Student_User(AbstractUser):
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM