Джанго:"Cannot create form field"

В моём джанго проекте есть два приложения, модель из одного из них подключено ко второму и является полем для ModelForm

Первая модель:

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey
from django.db import models
from django.contrib.auth.models import User
from .fields import OrderField
from django.template.loader import render_to_string
from django.utils.safestring import mark_safe

class Subject(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True)

    class Meta:
        ordering = ['title']

    def __str__(self):
        return self.title

Вторая модель

from django.db import models
from django.contrib.auth.models import User
import sys
sys.path.append('../')
from courses.models import Subject

class Teacher(models.Model):
    name = models.CharField(max_length=20)
    surname = models.CharField(max_length=20)
    subject = models.ForeignKey('Subject', on_delete=models.CASCADE,
        related_name='teacher_subject')
    person = models.ForeignKey(User,
        related_name='teacher', on_delete=models.CASCADE)

    def __str__(self):
        initials = self.name + ' ' + self.surname
        return initials

Форма:

from django import forms
from courses.models import Course
from django.forms import ModelForm
from .models import Teacher

class CourseEnrollForm(forms.Form):
    course = forms.ModelChoiceField(queryset=Course.objects.all(),
        widget=forms.HiddenInput)

class TeacherRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password',
        widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password',
        widget=forms.PasswordInput)
    class Meta:
        model = Teacher
        fields = ['name', 'surname', 'subject']

Объясните, пожалуйста, в чём заключается моя ошибка, что её вызывает, а не только то, как её исправить

Код ошибки: "ValueError: Cannot create form field for 'subject' yet, because its related model 'Subject' has not been loaded yet"


Ответы (1 шт):

Автор решения: Andrew Holovko
  1. Переименуйте, Subject в Subject2 - такой класс уже в моделях есть.
  2. Замените в Teacher :
...
subject = models.ForeignKey('Subject2', on_delete=models.CASCADE, related_name='teacher_subject')
...

На

from app2.models import Subject2
...
subject = models.ForeignKey(Subject2, on_delete=models.CASCADE, related_name='teacher_subject')
...

По просту в вашей app не мог найти откуда брать Subject2.

→ Ссылка