Как исправить «ImportError» при работе с несколькими приложениями Django - PullRequest
0 голосов
/ 05 февраля 2019

Я работаю с несколькими приложениями в django и сталкиваюсь с ImportError при выполнении команды makemigrations.
Заявления на импорт следующие: (1005 *

accounting / models.py
from activity.models import HistoryModel

действие / модели.py
from user_management.models import Customer, Merchant, PassIssued
from accounting.models import ITMSCustomer

user_management / models.py
from accounting.models import Account, Transaction, Posting

Я уверенчто порядок приложений, перечисленных в INSTALLED_APPS, имеет значение, и порядок:

'user_management',
'accounting',
'activity',

При выполнении команды makemigrations появляется следующая ошибка:

  File "/home/abhishek/citycash/city-server/src/cityserver/user_management/models.py", line 4, in <module>
    from accounting.models import Account, Transaction, Posting
  File "/home/abhishek/citycash/city-server/src/cityserver/accounting/models.py", line 17, in <module>
    from activity.models import HistoryModel
  File "/home/abhishek/citycash/city-server/src/cityserver/activity/models.py", line 4, in <module>
    from user_management.models import Customer, Merchant, PassIssued
ImportError: cannot import name 'Customer'

Я попытался изменить порядок приложений в INSTALLED_APPS, но я только что получил ImportError для разных модулей.Я знаю, что это связано с тем, что все три приложения импортируют что-то друг от друга.Как мне решить эту ошибку?
Любая помощь приветствуется.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Чтобы помочь кому-то в будущем столкнуться с той же проблемой, я наконец-то создал новое приложение (с HistoryModel, BaseHistoryModel и т. Д.) И импортировал его.Любые другие предложения приветствуются.

0 голосов
/ 06 февраля 2019

Из документов: https://docs.djangoproject.com/en/2.1/ref/models/fields/#foreignkey

Если вам нужно создать связь на модели, которая еще не была определена, вы можете использовать имя модели, а не сам объект модели:

from django.db import models

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'Manufacturer',
        on_delete=models.CASCADE,
    )
    # ...

class Manufacturer(models.Model):
    # ...
    pass

Чтобы обратиться к моделям, определенным в другом приложении, вы можете явно указать модель с полной меткой приложения.Например, если описанная выше модель «Производитель» определена в другом приложении, называемом «производственным», вам необходимо использовать:

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'production.Manufacturer',
        on_delete=models.CASCADE,
    )

Этот тип ссылки, называемый ленивыми отношениями, может быть полезен при разрешении циклических зависимостей импортамежду двумя приложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...