Как работает импорт в проекте python (django) или проблема с импортом моделей из тестов в проекте django
У меня проблема с импортом моделей из тестов в проекте django. Вот структура моего проекта:
D:\learn_django\mysite
| db.sqlite3
| manage.py
| test.txt
| tree.txt
|
+---catalog
| | admin.py
| | apps.py
| | forms.py
| | models.py
| | urls.py
| | views.py
| | __init__.py
| |
| +---tests
| | | test_forms.py
| | | test_models.py
| | | test_views.py
| | | __init__.py
| | |
| | \---__pycache__
| | test_forms.cpython-39.pyc
| | test_models.cpython-39.pyc
| | test_views.cpython-39.pyc
| | __init__.cpython-39.pyc
| |
А файл test_models.py (в котором есть проблема с improt) выглядит так:
from catalog.models import Author
from django.test import TestCase
class AuthorModelTest(TestCase):
@classmethod
def setUpTestData(cls):
# Set up non-modified objects used by all test methods
Author.objects.create(first_name='Big', last_name='Bob')
def test_first_name_label(self):
author = Author.objects.get(id=1)
field_label = author._meta.get_field('first_name').verbose_name
self.assertEquals(field_label, 'first name')
Если я буду импортировать так:
from ..models import Author
Это будет работать.Но если я напишу импорт так, как сказано в mozilla lesson:
from catalog.models import Author
Pycharm сообщает об ошибках:Unresolved reference 'catalog'
Если я пытаюсь импортировать по абсолютному пути:
from mysite.catalog.models import Author
Тест проваливается с ошибкой:ModuleNotFoundError: No module named 'mysite.settings'
Здесь вы можете клонировать мой проект - https://gitlab.com/Galoperidol/learn_django3
Так что мои вопросы таковы:
- Почему второй и третий способы не работают?
- Почему, если я заменю папку "test" из папки "catalog" на папку "mysite" и попробую импортировать как: from
..catalog.models import Author
Тест завершается с ошибкой:ModuleNotFoundError: No module named 'mysite.settings'
Я знаю, что все папки для корректного импорта должны иметь файл init.py, чтобы быть пакетами, но это не помогает.