Django Admin: пользовательский набор форм встроенной модели (без связи с внешним ключом) - PullRequest
2 голосов
/ 20 января 2011

(django 1.2.4)

У меня есть две разные несвязанные (между ними нет связи по внешнему ключу) модели django.Например, скажем: «Школа» и «Учитель».

Что мне нужно, так это то, что при открытии представления добавления / редактирования в интерфейсе администратора django для объекта «Школа» должен быть встроенный набор форм объектов Учителя.Очевидно, это будут не отношения ФК, а скорее логические отношения (например, учителя, которые находятся в одной стране со школой ...).

Форма, которую мне нужно отобразить, является стандартной формой модели.У меня есть функция, которая выдала бы мне список (набор запросов, если необходимо) учителей для данной школы.

Возможно ли реализовать что-то подобное?

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Не совсем решение для моей проблемы, но в итоге я унаследовал класс ModelAdmin и переопределил метод change_view, реализовав необходимые мне функции (извлекая нужные мне объекты и передавая их через контекст в шаблон change_form, который я также расширил).

... и в итоге мне очень понравилась расширяемость Django AdminSite

1 голос
/ 03 января 2014

Сомнительно, что для этого есть законная причина.Например, для Учителя наиболее логично иметь внешний ключ от Школы.Однако недавно я решил эту проблему и впоследствии понял, что это не очень хорошая идея.Поскольку иногда нужно просто увидеть это, чтобы подумать о лучших решениях, я предоставляю решение:

Проблема, которую вы получаете при размещении несвязанных моделей в качестве встроенных, заключается в том, что parent_model совершенно неверен.В этом случае parent_model - это School, которая неверна и вызывает исключение.Предполагая, что у Учителя есть реальный родитель, решение состоит в том, чтобы исправить поле parent_model в вашем подклассе InlineModelAdmin.Вы можете сделать это, переопределив функцию init:

class TeacherInline(admin.TabularInline):
    def __init__(self, parent_model, admin_site):
        # override to permit change parent_model from School to Teacher-Parent
        # Assume Teacher's parent is Employer
        super(TeacherInline, self).__init__(Employer, admin_site)
...