Django 模型如何修复循环导入错误?

Django models how to fix circular import error?

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

目录结构

quiz/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

courses/models.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 app

的一部分

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

Django 对此有一个解决方案:您不仅可以将 class 的引用作为 target 模型传递给 ForeignKey(或另一个关系如 OneToOneFieldManyToManyField),但也可以通过 string.

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

# do <i>not</i> import the `courses.models

class Quiz(models.Model):
    lesson = models.ForeignKey(
        <b>'courses.Lesson'</b>,
        on_delete=models.DO_NOTHING
    )
    # …