【问题标题】:Export User model into different app将用户模型导出到不同的应用程序
【发布时间】: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。

标签: python django


【解决方案1】:

只需从之前的应用程序中删除旧的 User 模型,并将新的模型放入新应用程序中,这样最终您就只有一个扩展 AbstractUser 类的 User 类。

至于你的second issue,试试this

我希望这会有所帮助。

【讨论】:

  • 此外,如果您的第二个问题仍未解决,请尝试删除所有迁移的文件夹,重置您的数据库,然后重新开始迁移
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2011-04-12
  • 1970-01-01
  • 2017-04-07
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多