Обработка нескольких связанных объектов в admin без использования встроенных функций
Я настраиваю администратора Django для определенного представления некоторых данных.
Чего я достиг до сих пор
У меня есть модель Project
и модель ProjectObjectConditions
, для которой есть внешний ключ (фактические модели (на Github)):
class Project(models.Model):
[...]
class ProjectObjectiveCondition(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
С помощью пользовательского встроенного шаблона администратора (на Github) встроенные строки выглядят следующим образом:
То, что вы там видите, это:
Objective
: ПриятностьLevel
: НачатоCondition
: Говорит приятноCondition
: Не кричит
Level
: Первые результатыCondition
: Принимает благодарность с благодарностью
Level
: Зрелые результатыCondition
: Приносит искренние извинения
Objective
: КрасочностьLevel
: НачатоCondition
: Имеет синий цвет- ... и так далее
Conditions
сгруппированы по Objective
и Level
за счет многократного использования {% regroup %}
в шаблоне.
Столбцы даты/обязательства
Вы также можете просмотреть столбцы с датами (экземплярами класса WorkCycle
) и их значениями True
/False
, которые показывают, были ли приняты обязательства по этому проекту, а также по достичь которого Level
, в котором WorkCycle
(т.е. в каком году).
Я хочу заменить их редактируемыми галочками.
На самом деле у меня есть еще одна встроенная строка, LevelCommitmentInline
, которая позволяет мне редактировать эти значения True
/False
для этой модели, но я не хочу, чтобы они были в длинном списке где-то еще, Я хочу видеть каждое из них напротив Objective
и Level
, с которыми оно связано, и под столбцами даты - прямо здесь.
Как это сделать
Я думаю, что для этого мне нужно будет сгенерировать несколько форм, по одной для каждого Objective
/Level
из Project
, для каждого WorkCycle
. И тогда мне нужно будет найти способ привязать каждую из этих форм к чему-то, но я не знаю к чему.
Объекты Objective
и Level
в этом шаблоне, с которыми необходимо связать эти дополнительные формы на странице администрирования, на самом деле не взяты из этой формы, они извлекаются с помощью {% regroup %}
, т.е.
# regroup the inline_admin_formset
{% regroup inline_admin_formset by form.instance.projectobjective as objective_list %}
# loop over the new list
{% for objective_formset in objective_list %}
# get the Objective attributes I need from the formset
{{ objective_formset.grouper.objective.description }}
Then the same again in order to get hold of `LevelCommitment` objects and their fields.
Есть какие-нибудь блестящие идеи?