Отображение деталей в Django Admin для отношений "многие ко многим

У меня есть модель, в которой есть модель класса журнала и модель класса сессии. Для каждой сессии есть несколько журналов, которые могут быть записаны. Поэтому я создал следующую модель:

class Log(models.Model):
    log_workout = models.CharField(max_length = 30, blank=True, null=True)
    log_exercise = models.CharField(max_length = 30, blank=True, null=True)
    log_order = models.IntegerField(validators=[MinValueValidator(1)],blank=True, null=True)

class ActiveSession(models.Model):
    active = models.BooleanField(default=False)
    log = models.ManyToManyField(Log)
    date = models.DateTimeField(auto_now_add=True,blank=True, null=True)

В админке я пытался использовать inline, чтобы я мог видеть детали каждого журнала в сессии, но он показывает только полный список и выделяет добавленные журналы.

Здесь находится admin.py

class ActiveSessionInline(admin.TabularInline):
    model = ActiveSession.log.through

class LogAdmin(admin.ModelAdmin):
    model = Log
    inlines = [
        ActiveSessionInline,
    ]

Мой вопрос: Могу ли я вместо того, чтобы показывать добавленный журнал на изображении ниже, показывать журналы, которые выбраны, как если бы я просматривал их из LogAdmin, даже если это inline

enter image description here

<

Но:

  • Вы не сможете редактировать журналы без дополнительного материала - например, всплывающей формы + js + View для отправки
  • .
  • original.log.all содержит только то, что выбрано в данный момент... Вам почти придется либо:
    • войти в форму из fieldset и в цикле перебрать опции поля, чтобы показать все
    • .
    • либо вы можете каким-то образом упаковать дополнительные данные в ModelAdmin
    • .
admin.py
class LogAdmin(admin.ModelAdmin):
    model = Log
    inlines = [
        ActiveSessionInline,
    ]

    # override template
    change_form_template = 'admin/logadmin_change.html'
logadmin_change.html
{% extends "admin/change_form.html" %}

{% block field_sets %}

   
  <!-- Original Field Loop -->
  {% for fieldset in adminform %}
    {% include "admin/includes/fieldset.html" %}
  {% endfor %}

  <!-- Custom Loop - 'original' is current Model being changed -->
  {% for i in original.log.all %}
    <div class="selectedLogs" pk="{{i.pk}}">
      {{i}} (make better looking tho)
    </div>
  {% endfor %}

{% endblock %}
Вернуться на верх