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, я вижу список данных, но когда я нажимаю, чтобы посмотреть детали конкретного экземпляра, я получаю ошибку
Правильные списки экземпляров:
И ошибка, которую я получаю, когда я нажимаю для экземпляра ContactEntry:
Ниже приведен мой код в моем 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",
]
Теперь у меня следующий вопрос: где находится связанный шаблон? И как его перегрузить?