Обработка нескольких связанных объектов в 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.
Есть какие-нибудь блестящие идеи?
