Ошибка значения: попытка относительного импорта за пределы пакета верхнего уровня при попытке импортировать модели из другого приложения в django

#python #django

Вопрос:

У меня есть два приложения django в моем проекте в моем проекте под названием electron: первый api и второй elec_meter. Каталоги организованы следующим образом:

 electron /
   api/
      views.py
      ...
   elec_meter/
      models.py
      ...
 

В api / views.py файл, который я хочу импортировать elec_meter / models.py.Вот как я это делаю:

 from ..elec_meter.models import *
 

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

 ValueError: attempted relative import beyond top-level package
 

или

 from electron.elec_meter.models import *
 

В этом случае я получаю это сообщение об ошибке:

 ModuleNotFoundError: No module named 'electron.elec_meter'
 

Вот изображение моего кода

Как я могу решить эту проблему?

Комментарии:

1. from elec_meter.models import *

2. Но, пожалуйста, не используйте import * . Упомяните, что вы импортируете, импорт всех элементов может привести к неожиданным результатам, так как он может переопределять существующие ссылки.

3. ОК. Это работает, но Пыхарм считает эту строку ошибкой.

4. затем вы выбрали неверный каталог как «Корневой каталог Python», нажмите кнопку rigt в electron каталоге и обозначьте его как корневой каталог python.

5. Идеально ! Спасибо.

Ответ №1:

Корневой путь Python-это electron каталог, с которым вы не можете работать from electron.… .

Вы можете импортировать объекты, импортировав их, начиная с имени приложения, а не проекта. Это, таким образом, означает, что вы импортируете это с:

 from elec_meter.models import Model1, Model2 

хотя вы можете импортировать подстановочные знаки, это часто считается антипаттером, поскольку неясно, что вы импортируете. Это означает, что он может устанавливать ссылки, указывающие на объекты, экспортируемые elec_meter.models модулем, и, таким образом, переопределять исходные ссылки.