Столкновение с проблемой циклического импорта
У меня есть два приложения (front и lrnadmin) в проекте (portal) это мой корневой каталог
Проблема в том, что когда я импортирую модели друг в друга, это дает мне ошибку.
В этой модели я хочу использовать квалификацию в качестве внешнего ключа, поэтому я хочу импортировать квалификацию из lrnadmin.models
this is my front.models.py
from datetime import datetime, timezone
from django.db import models
from django.db.models import expressions
from django.db.models.base import Model
from django.utils import timezone
from lrnadmin.models import Qualification
class Staff(models.Model):
"""Model definition for Staff."""
# TODO: Define fields here
nStaff = models.CharField(max_length= 50)
role = models.CharField(max_length= 50)
lrnQ = models.ForeignKey(Qualification, on_delete= models.CASCADE)
relQ = models.CharField(max_length=200)
relE = models.CharField(max_length=200)
# Cv = models.CharField(max_length=100, blank=True, null=True)
# Doc = models.CharField(max_length=100, blank=True, null=True)
sec7 = models.ForeignKey(Sec7, on_delete=models.CASCADE)
class Meta:
"""Meta definition for Staff."""
verbose_name = 'Staff'
verbose_name_plural = 'Staffs'
# def __str__(self):
# """Unicode representation of Staff."""
# pass
и в этой модели я хочу User как внешний ключ, поэтому я хочу import User из front.models
this is my lrnadmin.models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils import timezone
from front.models import User
class CentreCode(models.Model):
"""Model definition for CentreCode."""
# TODO: Define fields here
user = models.ForeignKey(User, on_delete= models.CASCADE)
centreCode = models.CharField(max_length= 20)
categories = models.CharField(max_length = 20)
authorisation = models.CharField(max_length= 20)
registrationType = models.CharField(max_length= 20)
class Meta:
"""Meta definition for CentreCode."""
verbose_name = 'CentreCode'
verbose_name_plural = 'CentreCodes'
# def __str__(self):
# """Unicode representation of CentreCode."""
# pass
Как я могу справиться с этим
File "E:\lrn\portal\lrnadmin\models.py", line 4, in <module>
from front.models import User
File "E:\lrn\portal\front\models.py", line 7, in <module>
from lrnadmin.models import Qualification
ImportError: cannot import name 'Qualification' from partially initialized module 'lrnadmin.models' (most likely due to a circular import) (E:\lrn\portal\lrnadmin\models.py)
вы можете попробовать get_model, который позволит избежать импорта модели во время выполнения
from django.apps import apps
qualification_model = app.get_model('lrnadmin', 'Qualification')
ИЛИ
вы можете попробовать импортировать модель внутри функции вместо импорта на уровне модуля
Вы можете "лениво загрузить" модель, используя строковый литерал, как описано в docs
, поэтому, например, для front
модели приложения User
вы можете определить ее следующим образом:
# Remove from front.models import User
class CentreCode(models.Model):
# ...
user = models.ForeignKey('front.User', on_delete= models.CASCADE)
# ...
Если вы определили front.models.User
как пользовательскую модель, настоятельно рекомендуется просто ссылаться на пользовательскую модель, используя settings.AUTH_USER_MODEL
, как описано here
:
from django.conf import settings
# Remove from front.models import User
class CentreCode(models.Model):
# ...
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete= models.CASCADE)
# ...