Django Проблема с ссылкой на не объявленную модель в models.py
Пытаюсь сослаться на еще не объявленный класс в models.py. В документации сказано, что достаточно указать имя класса в кавычках.
Если вам нужно создать отношение на модель, которая еще не была определена, вы можете использовать имя модели, а не сам объект модели
from django.db import models
class Car(models.Model):
manufacturer = models.ForeignKey(
'Manufacturer',
on_delete=models.CASCADE,
)
# ...
class Manufacturer(models.Model):
# ...
pass
Однако Django всё равно выдает ошибку.
models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from .managers import SpUserAuthManager
import uuid
class SpUser(models.Model):
objects = SpUserAuthManager()
id = models.BigIntegerField(primary_key=True, unique=True)
username = models.CharField("Никнейм", max_length=100, default='username', unique=True)
discord_tag = models.CharField('Дискорд тэг', max_length=100, unique=True)
mojang_id = models.CharField('Моджанг id', max_length=100, default='0', unique=True)
---> current_tabel = models.ForeignKey('Tables', on_delete=models.DO_NOTHING, related_name="Текущий стол", blank=True) <---
last_login = models.DateTimeField('Последняя сессия',null=True, default=timezone.now)
levels = (
('wooden', 'деревянный'),
('mushroom', 'грибной'),
('magma', 'магмовый'),
('honey', 'медовый'),
('netherite', 'незеритовый'),
)
level = models.CharField('Уровень', max_length=11, choices=levels, default='wooden')
def is_authenticated(self, request):
return True
def __str__(self):
return self.username
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
class Tables(models.Model):
slug = models.SlugField("Код стола", unique=True, default=uuid.uuid4)
types = (
('wooden', 'деревянный'),
('mushroom', 'грибной'),
('magma', 'магмовый'),
('honey', 'медовый'),
('netherite', 'незеритовый'),
)
type = models.CharField('Уровень', max_length=11, choices=types, default='wooden')
date = models.DateTimeField('Дата создание стола', default=timezone.now)
empty_fields = models.IntegerField("Мест осталось", default=8)
legend = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Легенда+")
mentor1 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Наставник 1+")
mentor2 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Наставник 2+")
builder1 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Строитель 1+")
builder2 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Строитель 2+")
builder3 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Строитель 3+")
builder4 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Строитель 4+")
donator1 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 1+", null=True, default=SpUser.objects.get(id=0).pk)
donator2 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 2+", null=True, default=SpUser.objects.get(id=0).pk)
donator3 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 3+", null=True, default=SpUser.objects.get(id=0).pk)
donator4 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 4+", null=True, default=SpUser.objects.get(id=0).pk)
donator5 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 5+", null=True, default=SpUser.objects.get(id=0).pk)
donator6 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 6+", null=True, default=SpUser.objects.get(id=0).pk)
donator7 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 7+", null=True, default=SpUser.objects.get(id=0).pk)
donator8 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 8+", null=True, default=SpUser.objects.get(id=0).pk)
def __str__(self):
return self.slug
class Meta:
verbose_name = 'Стол'
verbose_name_plural = 'Столы'
Ошибка
PS C:\Users\Tregyn\Desktop\GiveAndGet> python manage.py makemigrations
Traceback (most recent call last):
File "C:\Users\Tregyn\Desktop\GiveAndGet\manage.py", line 22, in <module>
main()
File "C:\Users\Tregyn\Desktop\GiveAndGet\manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line
utility.execute()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\core\management\__init__.py", line 420, in execute
django.setup()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\apps\registry.py", line 116, in populate
app_config.import_models()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\apps\config.py", line 304, in import_models
self.models_module = import_module(models_module_name)
File "C:\Python310\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\Users\Tregyn\Desktop\GiveAndGet\main\models.py", line 52, in <module>
class Tables(models.Model):
File "C:\Users\Tregyn\Desktop\GiveAndGet\main\models.py", line 78, in Tables
donator1 = models.ForeignKey(SpUser, on_delete=models.DO_NOTHING, related_name="Даритель 1+", null=True, default=SpUser.objects.get(id=0).pk)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\query.py", line 492, in get
num = len(clone)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\query.py", line 302, in __len__
self._fetch_all()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\query.py", line 1507, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\query.py", line 57, in __iter__
results = compiler.execute_sql(
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1348, in execute_sql
sql, params = self.as_sql()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\sql\compiler.py", line 573, in as_sql
extra_select, order_by, group_by = self.pre_sql_setup()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\sql\compiler.py", line 64, in pre_sql_setup
self.setup_query()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\sql\compiler.py", line 55, in setup_query
self.select, self.klass_info, self.annotation_col_map = self.get_select()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\sql\compiler.py", line 247, in get_select
cols = self.get_default_columns()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\sql\compiler.py", line 817, in get_default_columns
column = field.get_col(alias)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\fields\related.py", line 1178, in get_col
output_field = self.target_field
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\fields\related.py", line 1040, in target_field
return self.foreign_related_fields[0]
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\utils\functional.py", line 49, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\fields\related.py", line 738, in foreign_related_fields
rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\utils\functional.py", line 49, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\fields\related.py", line 725, in related_fields
return self.resolve_related_fields()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\fields\related.py", line 1083, in resolve_related_fields
related_fields = super().resolve_related_fields()
File "C:\Users\Tregyn\Desktop\GiveAndGet\venv\lib\site-packages\django\db\models\fields\related.py", line 703, in resolve_related_fields
raise ValueError(
ValueError: Related model 'Tables' cannot be resolved