В Django, почему я не могу импортировать модель в файл python, созданный мной внутри того же приложения?
Я создал в Django, в моем приложении файл python для forms и я хочу импортировать модель из .models (из того же приложения). Проблема в том, что когда я импортирую модель, она возвращает ошибку.
Модель is(models.py):
class Article(models.Model):
title = models.CharField(max_length=100)
location=models.CharField(max_length=120,null=True,blank=True)
category=models.CharField(max_length=100,null=True,blank=False)
slug=models.SlugField(null=True, blank=True, unique=True)
boddy=models.TextField()
timestamp = datetime.now()
update = models.TimeField(auto_now=True)
Проблема в util.py (файл python, который я создал) :
from .models import Article
Ошибка:
ImportError: cannot import name 'Article' from partially initialized module 'hello.models' (скорее всего, из-за циклического импорта) (D:\Python\Django\Projects\myproject\hello\models.py)
Файлы python находятся в одном приложении
Похоже, вы пытаетесь сделать то, что называется "Круговой импорт"; вы не можете этого сделать.
Ваше приложение разделено на модули и пакеты. (.py
файлы и папки с __init__.py
файлом внутри), и когда вы импортируете модуль в другой модуль, python запустит весь этот модуль и установит его в память.
Если в models.py вы запускаете
from ./.. import utils
... и в utils.py
from .models import Article
Вы закончите импортированием модуля в другой, затем в другой рекурсивно, что приведет к переполнению памяти.
Чтобы этого не произошло, Django поставляется с несколькими проверками, которые предотвращают этот циркулярный импорт.
Хороший способ предотвратить это - разделить ваши классы на более мелкие модули, чтобы вы импортировали только этот модуль.
С другой стороны, если вам нужно ссылаться на внешние ключи, вы можете использовать встроенную в Django Lazy Reference, используя '<app_name>.<ClassName>'
под кавычками.
Поступая таким образом, вам не придется импортировать модуль, следовательно, нет риска циркулярного импорта.