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

Вернуться на верх