Почему я не могу ссылаться на этот класс из другого приложения в моем проекте Django? - PullRequest
0 голосов
/ 26 марта 2019

Я использую Django и Python 3.7. У меня есть два приложения в моем проекте - общее и основное. В общем, у меня есть файл "model_utils.py" в корне моего приложения (прямо рядом с models.py). Содержит этот код

class RawCol(Expression):

    def __init__(self, model, field_name):
        field = model._meta.get_field(field_name)
        self.table = model._meta.db_table
        self.column = field.column
        super().__init__(output_field=CharField())

    def as_sql(self, compiler, connection):
        sql = f'"{self.table}"."{self.column}"'
        return sql, []

Как мне ссылаться на этот класс из моего другого приложения, "mainsite"? Я поместил это наверху одного из моих файлов в главном сайте ..

from common import RawCol

но когда я запускаю несколько тестов, я получаю эту ошибку ...

ImportError: cannot import name 'RawCol' from 'common' (/Users/davea/Documents/workspace/mainsite_project/common/__init__.py)

Редактировать: Структура проекта в каталогах верхнего уровня выглядит как ...

+ common
+ mainsite
+ mainsite_project
+ manage.py
+ templates
+ venv

1 Ответ

3 голосов
/ 26 марта 2019

Попробуйте from common.model_utils import RawCol

вместо from common import RawCol

Вам всегда нужно указывать точный файл .py (без окончания .py) для импорта из.

Если это все еще не работает, это может быть проблема кругового импорта.

Если вы пытаетесь импортировать что-то из mainsite.model в common.model_utils и наоборот, вы создаете невозможный цикл импорта,

Это можно исправить, создав отдельный файл, такой как common / independent_model.py, и поместив туда только класс RawCol () без импорта из основного сайта.Таким образом, оба файла не импортируются друг из друга (что не работает).

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