Django-polymorphic: Ошибка сайта администратора: отображение встроенного администратора с ManyToMany с использованием промежуточной полиморфной модели

Я новичок в django. Это мой первый проект Django. Как вы можете догадаться из названия вопроса, моя проблема немного длинная для объяснения.

Вкратце: я хочу знать, как сделать базовое отображение Admin Inline для отношения ManyToMany с промежуточной полиморфной моделью. У меня TemplateDoesNotExist at /admin/blu_forms/contactentry/e6529155-82a3-43b6-9e14-34951c88471a/change/ ошибка.

Изначально идея проста: У меня есть два класса ContactEntry и ContactField. У записи контакта может быть много полей и наоборот, поэтому у нас есть отношение ManyToMany между этими двумя классами. Поскольку я хочу хранить типизированные данные в этих отношениях (потому что данное поле связано с типизированными данными для данной записи - полевое отношение), я использую промежуточную модель (through model) для хранения этих данных. Правильная типизация обрабатывается с помощью полиморфизма (django-polymorphic).

Это работает хорошо. Я сделал собственный скрипт для заполнения базы данных (PostgreSQL), и он отлично работает.

Моя проблема связана с сайтом администратора. Когда я регистрирую ContactEntry и ContactField, я вижу список данных, но когда я нажимаю, чтобы посмотреть детали конкретного экземпляра, я получаю ошибку

Правильные списки экземпляров:

Correct list of ContactFields in Admin Website

Correct list of ContactEntries in Admin Website

И ошибка, которую я получаю, когда я нажимаю для экземпляра ContactEntry:

Django error on detail admin view

Ниже приведен мой код в моем project/app/admin.py:

from django.contrib import admin

from polymorphic.admin import PolymorphicParentModelAdmin
from polymorphic.admin import PolymorphicChildModelAdmin
from polymorphic.admin import PolymorphicChildModelFilter
from polymorphic.admin import StackedPolymorphicInline
from polymorphic.admin import PolymorphicInlineSupportMixin

from .models import *





# TODO: complete admin with ManyToMany relationship
class ContactFieldDataInline(StackedPolymorphicInline):
    model = ContactFieldData
    
    class BooleanContactFieldDataInline(StackedPolymorphicInline.Child):
        model = BooleanContactFieldData

    class CharContactFieldDataInline(StackedPolymorphicInline.Child):
        model = CharContactFieldData

    class TextContactFieldDataInline(StackedPolymorphicInline.Child):
        model = TextContactFieldData

    class IntegerContactFieldDataInline(StackedPolymorphicInline.Child):
        model = IntegerContactFieldData

    class FloatContactFieldDataInline(StackedPolymorphicInline.Child):
        model = FloatContactFieldData

    class DateContactFieldDataInline(StackedPolymorphicInline.Child):
        model = DateContactFieldData

    class DateTimeContactFieldDataInline(StackedPolymorphicInline.Child):
        model = DateTimeContactFieldData

    class EmailContactFieldDataInline(StackedPolymorphicInline.Child):
        model = EmailContactFieldData

    class URLContactFieldDataInline(StackedPolymorphicInline.Child):
        model = URLContactFieldData
    
    child_inlines = [
        BooleanContactFieldDataInline,
        CharContactFieldDataInline,
        TextContactFieldDataInline,
        IntegerContactFieldDataInline,
        FloatContactFieldDataInline,
        DateContactFieldDataInline,
        DateTimeContactFieldDataInline,
        EmailContactFieldDataInline,
        URLContactFieldDataInline
    ]

class ContactFieldAdmin(
    PolymorphicInlineSupportMixin,
    admin.ModelAdmin
):
    inlines = [ContactFieldDataInline]

class ContactEntryAdmin(
    PolymorphicInlineSupportMixin,
    admin.ModelAdmin
):
    inlines = [ContactFieldDataInline]

admin.site.register(ContactEntry, ContactEntryAdmin)
admin.site.register(ContactField, ContactFieldAdmin)

А мой project/app/models.py:

И полное сообщение об ошибке:

Я прочитал ManyToMany relationship on Django Model doc, django-polymorphic admin integration и особенно Working with many-to-many intermediary models или искал ответ на StackOverflow, но я все еще не знаю, как исправить ошибку.

У меня есть чувство, что я должен попробовать создать свой собственный шаблон, но я понятия не имею, как это сделать. Спасибо за любую помощь.

Ок... ответ действительно короткий...

Просто добавьте polymorphic к INSTALLED_APPS в settings.py.

Как в этом settings.py примере:

INSTALLED_APPS = [
    'django.contrib.admin',
    ...
    "polymorphic",
]

Теперь у меня следующий вопрос: где находится связанный шаблон? И как его перегрузить?

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