【发布时间】:2016-01-20 15:46:55
【问题描述】:
我在不同的情况下遇到过几次这个问题,但我的设置如下:
我有两个 Django 模型文件。包含用户可用于注册课程的用户模型和优惠券代码。这些都在 account/models.py 文件中。 Course 和相关的多对多字段位于不同的模型文件 course/models.py 中。我通常在我的代码中将它们分别称为 amod 和 cmod。
在 course/models.py 我有一个 import 声明:
from account import models as amod
class Course(ExtendedModel):
stuff = stuff
我需要为 Course 和 User 之间的多对多模型/表导入 account/models.py 文件,此处未显示。到目前为止,一切顺利。
在 account/models.py 文件中,我有 CouponCode 模型。每个实例都会被创建,然后可以在创建后分配给特定的 Course 对象,以允许学生使用它来注册系统中的课程。
class CouponCode(ExtendedModel):
assigned_course = UniqueIDForeignKey("course.Course", blank=True, null=True, related_name='assigned_coupon_code_set')
...
...
@staticmethod
def assign_batch(c, upper_limit):
import course.models as cmod # Why is this allowed here?
assert isinstance(c, cmod.Course)
# Do other stuff here
该静态方法允许我传入一个课程对象和一些我想分配给它的优惠券代码,然后它将接下来的 N 个未分配代码分配给该课程。我的问题来自断言声明。
我需要从 course/models.py 导入 Course 对象,以确保传入的对象实际上是 Course 的一个实例,但如果我在文件顶部这样做,我会遇到问题,因为文件已被导入 course/models.py。 (amod 被导入到 cmod 中,然后在 amod 中我需要导入 cmod)。
如果我在需要它之前在方法中导入它而不是在文件顶部导入它,为什么它允许我这样做?
【问题讨论】:
标签: python django import circular-dependency