Django ImportError выглядит как цикл - PullRequest
0 голосов
/ 04 ноября 2011

В моем проекте django у меня есть следующее:

apps1 / models.py: сообщение (модель)
apps2 / models.py: блоги (модель)
apps2 / functions.py:get_blogs (метод)

Файл apps1 / models.py импортирует модель блогов из apps2 / models.py.
Файл apps2 / models.py импортирует метод get_blogs из apps2 / functions.py.
Файл apps2 / functions.py импортирует модель Post из apps1 / models.py.

Я получаю следующую ошибку:

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

Возможно, администратор.autodiscover сначала импортирует модель Post, а затем через цикл импорта пытается снова импортировать ее.Хотя я попытался изменить его на:

from apps1.models import Post as OtherPost

, но это не помогло.Есть идеи, почему это происходит?Это потому, что сейчас есть петля?

1 Ответ

8 голосов
/ 04 ноября 2011

Если единственная причина, по которой вы импортируете Blogs в apps1.models, заключается в том, что у вас есть поле отношения в 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...