【问题标题】:Django ERROR - The models is used as an intermediate models ... does not have a foreign key to 'Group' or 'Permission'Django 错误 - 模型被用作中间模型......没有“组”或“权限”的外键
【发布时间】:2020-04-17 04:16:26
【问题描述】:

几天前我开始学习 Django,为了练习,我决定做一个小项目。

完成模型后,我尝试使用 django.db 将其映射到 sqlite3 中的关系模型。但是在我运行python manage.py makemigrations <app_name> 之后,我得到了以下错误:

python manage.py makemigrations main
SystemCheckError: System check identified some issues:

ERRORS:
auth.Group_permissions: (fields.E336) The models is used as an intermediate models by '<django.db.models.fields.related.ManyToManyField: permissions>', but it does not have a foreign key to 'Group' or 'Permission'.
auth.User_groups: (fields.E336) The models is used as an intermediate models by '<django.db.models.fields.related.ManyToManyField: groups>', but it does not have a foreign key to 'User' or 'Group'.
auth.User_user_permissions: (fields.E336) The models is used as an intermediate models by '<django.db.models.fields.related.ManyToManyField: user_permissions>', but it does not have a foreign key to 'User' or 'Permission'.
contenttypes.ContentType: (models.E012) 'unique_together' refers to the nonexistent field 'models'.

我真的很困惑它们的含义(至少它们看起来很相似)。在我的模型中,实际上没有多对多关系,而且我从未修改过错误消息中列出的任何类(用户、组)。

我不知道我的模型的代码是否与此有关。但我怀疑我是如何构建我的项目的;我将 models.py 文件留空,并创建了一个新目录“models”,其中包含我的所有模型文件。所以:

<m_app>
├── migrations
│  
├── sumbmodels
│   └── __init__.py  <--- imports modelA, modelB, etc
|   └── modelA.py
|   └── modelB.py
|   └── ...
|
├── static
│   └── <my_app>
|
├── templates
│   └── <my_app>
|
├── tests
│   └── __init__.py
|   └── testA.py
|   └── testB.py
|   └── ...
│  
└── models.py  <--- from .submodels import *
│  
└── ...

如果这不是太多信息,我很抱歉,但鉴于此错误,我不知道在哪里查看。

【问题讨论】:

  • 更新:目录分布

标签: python django


【解决方案1】:

首先,我建议坚持使用 Django 基础设计 - 将所有模型保留在 models.py

当模型数量变大时——您可以考虑将这样的大应用拆分为几个较小的应用,每个只负责其功能。您的 django 项目可能包含多个应用程序。

如果您想在多个文件中包含模型 - 请检查 [this answer] (Split models.py into several files)。

【讨论】:

  • 关于将我的模型拆分为多个应用程序,我觉得这不是在我的项目中工作的最佳方式。例如,在我的模型目录中声明的所有类和函数都对应于相同的功能。当然,每个班级都有不同的职责,但它们都意味着同一件事。
  • 关于Split models.py into several files,我已经这样做了,但我仍然收到相同的错误消息:(
  • 好吧,在引用的答案解决方案中提出的models.py 的内容就像from .submodels.model1 import * 一样有效。如果您要导入整个模块,而不是单独导入每个模型,您是否在子模型 __init__.py 中导出 __all__?尝试隔离问题 - 是否在没有此应用的情况下开始?
  • 在 __init__.py 中添加了 __all__ 变量。同样的错误。它是目前项目中唯一的应用程序,它很小,但为了方便起见,我将模型分为 4 个文件,每个文件约 50 行。
  • 现在是寻找导致错误的行。错误行几乎没有表明它。需要更多代码或/并且您需要隔离问题代码 - 在没有整个应用程序或其某些部分的情况下启动您的 django 项目,直到它工作/失败。也许这些模型在 admin.py/views/etc 中被引用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多