【问题标题】:Django models how to fix circular import error?Django 模型如何修复循环导入错误?
【发布时间】:2023-03-12 04:53:01
【问题描述】:

我阅读了有关该错误的解决方案(写 import 而不是 from ...),但我认为它不起作用,因为我有一个复杂的文件夹结构。

目录结构

测验/models.py

import apps.courses.models as courses_models


class Quiz(models.Model):
    lesson = models.ForeignKey(courses_models.Lesson, on_delete=models.DO_NOTHING)  # COURSE APP MODEL IMPORTED

课程/模型.py

import apps.quiz.models as quiz_models


class Lesson(models.Model):
   ...

class UserCompletedMaterial(models.Model):
   ...
   lesson = models.ForeignKey(Lesson)
   quiz = models.ForeignKey(quiz_models.Quiz)  # QUIZ APP MODEL IMPORTED


你怎么能看到我就是不能把它放在一起或别的什么..
因为我认为UserCompletedMaterial 模型是courses 应用程序的一部分

【问题讨论】:

    标签: python django django-models python-import importerror


    【解决方案1】:

    两个模型相互引用,因此这意味着为了解释前者,我们需要后者,反之亦然。

    然而,Django 有一个解决方案:您不仅可以将class 的引用作为ForeignKey目标 模型(或OneToOneField 或@ 等其他关系) 987654324@),也可以通过一个字符串

    如果模型在同一个应用程序中,您可以使用字符串'<i>ModelName</i>',如果模型在另一个已安装应用程序中定义,您可以使用'<i>app_name</i>.<i>ModelName</i>'。在这种情况下,我们可以删除循环导入:

    # do not import the `courses.models
    
    class Quiz(models.Model):
        lesson = models.ForeignKey(
            'courses.Lesson',
            on_delete=models.DO_NOTHING
        )
        # …

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      • 2020-07-11
      相关资源
      最近更新 更多