Django - models.ForeignKey Получение ошибки, что класс упоминаний не определен

Я разрабатываю систему управления студентами на django и в процессе ее создания я получил следующее

class Dept(models.Model):
id = models.CharField(primary_key='True', max_length=100)
name = models.CharField(max_length=200)

def __str__(self):
    return self.name


class Course(models.Model):
    dept = models.ForeignKey(Dept, on_delete=models.CASCADE)
    id = models.CharField(primary_key='True', max_length=50)
    name = models.CharField(max_length=50)
    shortname = models.CharField(max_length=50, default='X')

    def __str__(self):
        return self.name

и при выполнении make migrations я получаю эту ошибку какими средствами я могу это исправить и как я могу справиться с этой ошибкой

    (studentmanagementsystem) C:\Users\harsh\dev\student management\student_management>python manage.py makemigrations
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\harsh\anaconda3\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\harsh\anaconda3\lib\site-packages\django\core\management\__init__.py", line 357, in execute
    django.setup()
  File "C:\Users\harsh\anaconda3\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\harsh\anaconda3\lib\site-packages\django\apps\registry.py", line 112, in populate
    app_config.import_models()
  File "C:\Users\harsh\anaconda3\lib\site-packages\django\apps\config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Users\harsh\anaconda3\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\harsh\dev\student management\student_management\student_app\models.py", line 10, in <module>
    class Dept(models.Model):
  File "C:\Users\harsh\dev\student management\student_management\student_app\models.py", line 18, in Dept
    class Course(models.Model):
  File "C:\Users\harsh\dev\student management\student_management\student_app\models.py", line 19, in Course
    dept = models.ForeignKey(Dept, on_delete=models.CASCADE)
NameError: name 'Dept' is not defined

(studentmanagementsystem) C:\Users\harsh\dev\student management\student_management>

Честно говоря, я не знаю, почему вы получили эту ошибку, поскольку то, что вы показали здесь в примере, является правильным. Единственные случаи (по крайней мере, о которых я знаю), когда вы получаете эту ошибку, это когда:

  1. Две модели определены в разных файлах, и существует проблема с импортом модели отношений.

  2. Модель, с которой создается связь, определяется после связи. В вашем примере это означает определение модели Dept после модели Course.

Вы можете импортировать ваши модели в виде строки, используя APP_NAME.MODEL_NAME, что позволяет избежать подобных случаев, особенно второго сценария, который я описал.

class Course(models.Model):
    # Assuming your model resides in an app called 'student_app'
    dept = models.ForeignKey('student_app.Dept', on_delete=models.CASCADE)
Вернуться на верх