Django ModelForm `fields_for_model` ссылается на `_default_manager`, который является None

Я работаю над проектом Django, используя стандартные модели и ModelForms. У меня есть следующие модели и формы:

# models.py

class ApplicationCore(TimestampedModel):
    user = models.ForeignKey(User, related_name="applications", on_delete=models.PROTECT)
    organization = models.ForeignKey(Organization, related_name="applications", on_delete=models.PROTECT)
    overall_status = models.TextField(choices=ApplicationOverallStatus.choices, default=ApplicationOverallStatus.in_progress.value)

    class Meta:
        abstract = True
...

class Application(ApplicationCore):
    applicant = models.OneToOneField(ApplicantInformation, null=True, on_delete=models.PROTECT)
    item_one = models.OneToOneField(ApplicationItemOne, null=True, on_delete=models.PROTECT)
    item_two = models.OneToOneField(ApplicationItemTwo, null=True, on_delete=models.PROTECT)

...


class ApplicationItemOne(ApplicationItemCore):
    choice = models.TextField(choices=ApplicationItemOneChoice.choices, null=True, blank=True)
    co_applicants = models.ForeignKey(ApplicantInformation, null=True, related_name="item_ones", on_delete=models.PROTECT)
# forms.py

class ApplicationForm(forms.ModelForm):
    has_item_one = False
    has_item_two = False

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.has_item_one = self.instance.item_one_id is not None
        self.has_item_two = self.instance.item_two_id is not None
    
    class Meta:
        model = Application
        fields = ('applicant',)

class ApplicationItemOneForm(forms.ModelForm):
    class Meta:
        model = ApplicationItemOne
        fields = '__all__'

Когда я пытаюсь выполнить любую команду Django, например python manage.py makemigrations, я получаю следующую ошибку:


File "/home/noah/dev/github/silica/silica-docs/django/sample-app/application/urls.py", line 5, in \<module\>
from application import views
File "/home/noah/dev/github/silica/silica-docs/django/sample-app/application/views.py", line 7, in \<module\>
from application.forms import CreateApplicationForm
File "/home/noah/dev/github/silica/silica-docs/django/sample-app/application/forms.py", line 19, in \<module\>
class ApplicationForm(forms.ModelForm):
File "/home/noah/.virtualenvs/sample-app/lib/python3.8/site-packages/django/forms/models.py", line 261, in __new__
fields = fields_for_model(
File "/home/noah/.virtualenvs/sample-app/lib/python3.8/site-packages/django/forms/models.py", line 183, in fields_for_model
formfield = f.formfield(\*\*kwargs)
File "/home/noah/.virtualenvs/sample-app/lib/python3.8/site-packages/django/db/models/fields/related.py", line 1060, in formfield
return super().formfield(\*\*kwargs)
File "/home/noah/.virtualenvs/sample-app/lib/python3.8/site-packages/django/db/models/fields/related.py", line 991, in formfield
'queryset': self.remote_field.model.\_default_manager.using(using),
AttributeError: 'NoneType' object has no attribute 'using'

Прочитав трассировку, кажется, что проблема в том, что ...model._default_manager возвращает None. Я не могу понять, почему это происходит. Это также происходит, если я закомментирую ApplicationForm выше, ошибка возникает на ApplicationItemOneForm.

Полная трассировка стека:

Пусть это будет уроком - всегда включайте все части кода, относящиеся к вашему вопросу! Проблема заключалась в том, что я оставил абстрактный метатег на ApplicantInformation из предыдущей версии кода. Абстрактные классы, конечно, не имеют менеджера, потому что они не могут быть инстанцированы.

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