【发布时间】:2018-01-24 15:46:30
【问题描述】:
我有一个包含一个应用程序的项目,用户、他们的帖子和其他模型都位于该应用程序中。现在我想分离用户模型并将其放入不同的应用程序中,称为用户。
我应该如何正确执行此操作?以及如何在旧版应用中使用此模型?
第一个应用的用户模型如下所示:
class User(AbstractUser):
class Meta:
permissions = (
('can_do_this', 'Permission1'),
('can_do_that', 'Permission2'),
...,
)
第二个(用户)应用的用户模型如下所示:
class ExternalUser(AbstractUser):
class Meta:
permissions = (
('can_do_this', 'Permission1'),
('can_do_that', 'Permission2'),
...,
)
我已完成 django-admin startapp users 并将用户的模型代码复制粘贴到创建的应用程序 models.py 中。
然后我试了makemigrations,失败了,显示:
SystemCheckError: System check identified some issues:
ERRORS:
photogal.User.groups: (fields.E304) Reverse accessor for 'User.groups'
clashes with reverse accessor for 'ExternalUser.groups'.
HINT: Add or change a related_name argument to the definition for
'User.groups' or 'ExternalUser.groups'.
photogal.User.user_permissions: (fields.E304) Reverse accessor for
'User.user_permissions' clashes with reverse accessor for
'ExternalUser.user_permissions'.
HINT: Add or change a related_name argument to the definition for
'User.user_permissions' or 'ExternalUser.user_permissions'.
users.ExternalUser.groups: (fields.E304) Reverse accessor for
'ExternalUser.groups' clashes with reverse accessor for 'User.groups'.
HINT: Add or change a related_name argument to the definition for
'ExternalUser.groups' or 'User.groups'.
users.ExternalUser.user_permissions: (fields.E304) Reverse accessor for
'ExternalUser.user_permissions' clashes with reverse accessor for
'User.user_permissions'.
HINT: Add or change a related_name argument to the definition for
'ExternalUser.user_permissions' or 'User.user_permissions'.
将related_name='+' 添加到旧用户模型会导致:
ERRORS:
<class 'django.contrib.auth.admin.UserAdmin'>: (admin.E020) The value of
'filter_horizontal[0]' must be a many-to-many field.
<class 'django.contrib.auth.admin.UserAdmin'>: (admin.E020) The value of
'filter_horizontal[1]' must be a many-to-many field.
谢谢!
【问题讨论】:
-
对于初学者来说,
Meta类应该缩进到父类中 -
能否请您发布两个应用程序的型号代码以及您将其导入的位置,这将很有帮助。
-
@tgdn,现已修复。谢谢
-
另外,这里似乎有一个 User 类和一个 ExternalUser 类,它们都继承自 AbstractUser?为什么你没有一个简单的用户类来处理它是否是外部用户?使用列或仅根据您要查找的内容检查是否设置了 id。
-
@sumeet-kumar 我刚刚将用户模型从旧应用程序复制到新应用程序。基本上,这就是用户的全部代码。其他模型将其用作 ForeignKey。