使用 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/