Django导入错误像循环

0 投票
1 回答
1685 浏览
提问于 2025-04-17 05:37

在我的Django项目中,我有以下文件:

apps1/models.py: Post(模型)
apps2/models.py: Blogs(模型)
apps2/functions.py: get_blogs(方法)

apps1/models.py文件从apps2/models.py导入了Blogs模型。
apps2/models.py文件从apps2/functions.py导入了get_blogs方法。
apps2/functions.py文件又从apps1/models.py导入了Post模型。

我遇到了以下错误:

ImportError at /
cannot import name Post

Traceback
admin.autodiscover()
<in file apps1/models.py>
from apps2.models import Blogs
<in file apps2/models.py>
from apps2.functions import get_blogs
<in file apps2/functions.py>
from apps1.models import Post

我想可能是因为admin.autodiscover先导入了Post模型,然后通过一个循环又试图再次导入它。虽然我尝试把它改成:

from apps1.models import Post as OtherPost

但这并没有解决问题。你知道为什么会这样吗?是因为现在有一个循环吗?

1 个回答

8

如果你在 apps1.models 中引入 Blogs 的唯一原因是因为 Post 中有一个关系字段,那你可以考虑使用懒加载关系。根据我的理解,这种关系是专门用来处理你现在遇到的这种导入循环问题的。

其实很简单,不用这样:

from apps2.models import Blogs
...
class Post(models.Model):
    ...
    my_blog = models.ForeignKey(Blogs)

你可以用这样的方式:

class Post(models.Model):
    ...
    my_blog = models.ForeignKey("apps2.Blogs")

撰写回答