Обработка нескольких связанных объектов в admin без использования встроенных функций

Я настраиваю администратора Django для определенного представления некоторых данных.

Чего я достиг до сих пор

У меня есть модель Project и модель ProjectObjectConditions, для которой есть внешний ключ (фактические модели (на Github)):

class Project(models.Model):
    [...]

class ProjectObjectiveCondition(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

С помощью пользовательского встроенного шаблона администратора (на Github) встроенные строки выглядят следующим образом:

Django with custom admin inline

То, что вы там видите, это:

  • 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.

Есть какие-нибудь блестящие идеи?

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