python-3.x - 具有自定义用户模型的 Django-cms : LookupError: Model 'accounts.CustomUser' not registered

标签 python-3.x django django-models django-cms

使用 Django 3.2/Django-cms 3.11。

我在尝试添加 PlaceholderField 时遇到问题来自cms.models.fields在我的events.models模块到EventVenue型号。

from cms.models.fields import PlaceholderField
class EventVenue(models.Model):
    name = models.CharField(_('name'), max_length=255)
    slider = PlaceholderField('room_slider')

设置:

INSTALLED_APPS = [
    'modeltranslation',
    'djangocms_admin_style',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django.forms',
    
    'haystack',
    'accounts',
    'cms',
    'menus',
    'treebeard',
    'sekizai',
    'filer',
    'easy_thumbnails',
    'mptt',
    'simple_history',
    'crispy_forms',
    'crispy_bootstrap5',

    'djangocms_text_ckeditor',
    'djangocms_link',
    'djangocms_file',
    'djangocms_picture',
    'djangocms_video',
    'djangocms_googlemap',
    'djangocms_snippet',
    'djangocms_style',
    'djangocms_forms',
    'django_flatpickr',
    'phonenumber_field',

    'bgv_cms',
    'ddz_cms',
    'events',
    'mail_list',
]
AUTH_USER_MODEL = 'accounts.CustomUser'

自定义用户类别:

class CustomUser(AbstractUser):
    organization = models.ForeignKey(Organization, on_delete=models.SET_NULL,blank=True, null=True, related_name='employee')
    mailing_list = models.ManyToManyField(to='MailList', related_name='mail_list', blank=True, verbose_name=_('Mailing lists'))
    room = models.CharField(_('Room Mailing Lists'), max_length=100, choices=FLOOR, blank=True, null=True)
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ('username',)

    objects = CustomUserManager()

    def __str__(self):
        return self.get_full_name() or self.username

这是回溯的相关部分:

from events.models import EventVenue
  File "C:\Users\SAIF\Desktop\projects\bgv\bgv\events\models.py", line 17, in <module>
    from cms.models.fields import PlaceholderField
  File "C:\Users\SAIF\Anaconda3\envs\bgv\lib\site-packages\cms\models\__init__.py", line 3, in <module>
    from .permissionmodels import *  # nopyflakes
  File "C:\Users\SAIF\Anaconda3\envs\bgv\lib\site-packages\cms\models\permissionmodels.py", line 19, in <module>
    User = apps.get_registered_model(user_app_name, user_model_name)
  File "C:\Users\SAIF\Anaconda3\envs\bgv\lib\site-packages\django\apps\registry.py", line 273, in get_registered_model
    raise LookupError(
LookupError: Model 'accounts.CustomUser' not registered.

我尝试更改 INSTALLED_APPS 中的应用程序顺序并继承 PermissionsMixin在自定义用户中但不起作用

帐户应用中的组织类:

class Organization(models.Model):
    name = models.CharField(max_length=255)
    contact_person = models.ForeignKey(settings.AUTH_USER_MODEL, 
                                       on_delete=models.CASCADE,
                                       blank=True, null=True, 
                                       help_text=_('if you changed the contact person to another user, you lose access to this organization info.'),
                                       related_name='owner')
responsible_for_room = models.ForeignKey(EventVenue, on_delete=models.SET_NULL,blank=True, null=True, related_name='responsible_for_room')
    def __str__(self):
        return self.name

最佳答案

在我当前的项目中添加 AUTH_USER_MODEL 进行一些测试后,我的结论如下:

  • AUTH_USER_MODEL 与 django-cms 一起使用需要注意细节
  • 更改 INSTALLED_APPS 订单可能会有所帮助,但对我(而不是 OP)没有帮助
  • 对我有帮助的是,确保包含 AUTH_USER_MODEL 的应用程序不导入任何与 cms 相关的内容(即没有 PageField、没有模型、没有帮助程序或任何内容。无法列出所有内容)的,但你会得到它)。因为这会触发权限模型的加载,即要导入用户模型。此外,包含您的用户的应用程序之前的任何应用程序(在 INSTALLED_APPS 中)不应导入任何 cms。

因此,对于这个特定案例/问题,这意味着检查 accounts 应用程序是否有任何 cms 导入。此外,对于任何其他可能触发 cms 导入的导入,例如 Organization - 可以将其删除,并将外键注释为 models.ForeignKey("organization_app.Organization",....) - 因为我不知道 Organization 位于何处。

这尚未经过充分研究,但无论如何可能会有所帮助。有趣的事实:如果您指定 AUTH_USER_MODEL = "auth.User" 一切都会正常运行。

关于python-3.x - 具有自定义用户模型的 Django-cms : LookupError: Model 'accounts.CustomUser' not registered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77577249/

相关文章:

python - Django 装置 : Cannot assign data to textfield using json file

python - Django 模型唯一约束异常

python-3.x - 在 Spyder 中启动新的 IPython 控制台时出错

python - python循环导入是一个实现细节吗?

python - 为什么 Python 3 中的 "1000000000000000 in range(1000000000000001)"这么快?

python - 如何使 django 模型的 CharField 中仅显示最后几个字符

python - Django ORM 查询性能

python - 为什么 Python 不可变类型(如 int、str 或 tuple)需要使用 `__new__()` 而不仅仅是 `__init__()` ?

python - 当我尝试将 admin 与 mysql 一起使用时,表 django_session 不存在

python - 删除 python django 模块中 content_id 和 ip_address 相同的重复项