importError: невозможно импортировать название модели

Я обновляю свое приложение django с django1.5 до django1.11. Я знаю, что это огромный скачок. Поэтому я получаю так много ошибок и пытаюсь их исправить. Это структура моего проекта. Я думаю, что допустил ошибки в appconfig. Я не мог понять это. введите здесь описание изображения

Теперь я застрял на этой ошибке.ImportError: cannot import name TrainingProfile

settings.py

INSTALLED_APPS = (
'admin.apps.AdminConfig',
'account.apps.AccountConfig',
'.............'
)

приложения/admin/apps.py

class AdminConfig(AppConfig):
    name = 'apps.admin'
    label = 'admin_app'

приложения/аккаунт/apps.py

class AccountConfig(AppConfig):
    name = 'apps.account'
    label = 'account_app'

приложения/админ/модели/init.py

from apps.admin.models.sector import *
from apps.admin.models.track import *
from apps.admin.models.training import *
...............

проследить

Traceback (most recent call last):
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception
    six.reraise(*_exception)
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models()
  File "/home/sample-applications/upgrade/venv/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/sample-applications/upgrade/pursuite/django-pursuite/apps/admin/models/__init__.py", line 17, in <module>
    from apps.admin.models.job import *
  File "/home/sample-applications/upgrade/pursuite/django-pursuite/apps/admin/models/job.py", line 13, in <module>
    from account.models import IndustryProfile
  File "./apps/account/models.py", line 13, in <module>
    from admin.models import Company, Track
  File "./apps/admin/models/__init__.py", line 18, in <module>
    from apps.admin.models.training import *
  File "/home/sample-applications/upgrade/pursuite/django-pursuite/apps/admin/models/training.py", line 12, in <module>
    from account.models import TrainingProfile
ImportError: cannot import name TrainingProfile

приложения/админ/модели/обучение.py

from django.db import models
from django.contrib import admin
from django.core.urlresolvers import reverse
from tinymce.models import HTMLField
from account.models import TrainingProfile
from analytics.models import State
from admin.common import html2text

__all__ = ['Training']


class Training(models.Model):
    '''
        Training
    '''
    class Meta:
        '''
            Meta properties for this model
        '''
        app_label = 'admin'

    TRAINING_CHOICES = {
        ('T', 'Trainers'),
        ('S', 'Students'),
    }
    training_title = models.CharField(max_length=100, db_index=True)
    provider = models.ForeignKey(TrainingProfile, db_index=True)
    training_for = models.CharField(max_length=1, choices=TRAINING_CHOICES)
    description = HTMLField()
    location = models.ForeignKey(State, db_index=True)
    create_date = models.DateTimeField(auto_now_add=True)
    write_date = models.DateTimeField(auto_now=True)

person Akhi    schedule 10.04.2018    source источник


Ответы (2)


Соответствующая часть в вашей трассировке такова:

File "/home/sample-applications/upgrade/pursuite/django-pursuite/apps/admin/models/__init__.py", line 17, in <module>
    from apps.admin.models.job import *
  File "/home/sample-applications/upgrade/pursuite/django-pursuite/apps/admin/models/job.py", line 13, in <module>
    from account.models import IndustryProfile
  File "./apps/account/models.py", line 13, in <module>
    from admin.models import Company, Track
  File "./apps/admin/models/__init__.py", line 18, in <module>
    from apps.admin.models.training import *
  File "/home/sample-applications/upgrade/pursuite/django-pursuite/apps/admin/models/training.py", line 12, in <module>
    from account.models import TrainingProfile
ImportError: cannot import name TrainingProfile

Отсюда я вижу, что вы импортируете модели администратора из моделей учетных записей (Company и Track) и наоборот (IndustryProfile, TrainingProfile), что делает круговой импорт. Очень странно, что это вообще работало в Django 1.5.

Чтобы решить вашу проблему, вы можете проверить, как вы используете эти модели, и если единственное, что нужно сделать, это указать его в качестве аргумента для models.ForeignKey, вы можете удалить импорт и вместо этого использовать строку ('account.IndustryProfile', 'account.TrainingProfile', 'admin.Company' и 'admin.Track'). Если вы не можете заменить все они пытаются заменить хотя бы те, которые решат вашу проблему.

Дополнительная информация в документации Django https://docs.djangoproject.com/en/1.11/ref/models/fields/#foreignkey

person VStoykov    schedule 10.04.2018
comment
Я изменил поле ForeignKey на provider = models.ForeignKey('account.TrainingProfile', db_index=True). так же, как я изменил остальные поля в приложении администратора. Но теперь я получаю RuntimeError: Conflicting 'userprofile' models in application 'account': <class 'account.models.UserProfile'> and <class 'apps.account.models.UserProfile'>. Я думаю, что допустил ошибку в appConfig. Но я не мог понять это. - person Akhi; 11.04.2018
comment
Вам нужно избавиться от app_label в Meta. В 1.11 они вам не нужны. Вероятно проблема в нем. - person VStoykov; 13.04.2018

Ваша модель находится в файле с именем training.py, а имя файла вообще не представлено в импорте. Его нет и в приведенной выше файловой структуре, так что просто внимательно посмотрите на свои файлы и исправьте оператор импорта.

person Ilian Iliev    schedule 10.04.2018
comment
В 1.5.5 все работало нормально. Он показывает ошибку только тогда, когда я обновляю django, а модель TrainingProfile находится в файле account/models.py. - person Akhi; 10.04.2018
comment
Может ли быть так, что другой импорт в файле models.py прерывается, что делает модель недоступной для импорта? Попробуйте from account.models import * - person Ilian Iliev; 10.04.2018