Как отобразить список дочерних объектов в детальном представлении для Django Admin?

У меня есть две модели: Setting и SettingsGroup.

Когда кто-то нажимает на определенный SettingsGroup в Django Admin и появляется страница редактирования/детализации, я бы хотел, чтобы дочерние Setting объекты отображались, но в виде списка, а не формы.

Я знаю, что в Django есть InlineModelAdmin, но здесь дочерние элементы отображаются как редактируемые формы.

Меня беспокоит не то, что дочерние объекты можно редактировать из родительского объекта, а то, сколько места это занимает. Я бы предпочел иметь список, содержащий либо ссылку на соответствующую дочернюю запись, либо изменяющий конкретный объект для редактирования в режиме inline.

Вот моя Setting модель:

class Setting(models.Model):
  key = models.CharField(max_length=255, blank=False)
  value = models.TextField(blank=True)
  group = models.ForeignKey('SettingsGroup', blank=True, 
    on_delete=models.SET_NULL, null=True)

  def __str__(self):
    return str(self.key)

И модель SettingsGroup:

class SettingsGroup(models.Model):
  name = models.CharField(max_length=255)
  description = models.TextField(blank=True)

  def __str__(self):
    return str(self.name)

Метод, который я не хочу использовать (или должен найти другой способ использования) - это InlineModelAdmin, который появляется в моем admin.py в настоящее время как:

class SettingsGroupInline(admin.StackedInlin):
  model = Setting
  fk_name = 'group'

@admin.register(SettingsGroup)
class SettingsGroupAdmin(admin.ModelAdmin):
  inlines = [ SettingGroupsInline, ]

Вот пример того, как я хотел бы, чтобы это работало:

  • Существует объект MySettings, экземпляр модели SettingsGroup.
  • Есть объект CoolSetting и объект BoringSetting, каждый из которых является экземпляром модели Setting.
  • У объекта CoolSetting его group установлен на объект MySettings.
  • У объекта BoringSetting нет набора group.
  • Когда я открываю представление детализации/редактирования в Django Admin для объекта MySettings, я вижу обычную форму редактирования для объекта MySettings и под ней объект CoolSetting (но не в виде формы).
  • Я не вижу объект BoringSetting, потому что он не является дочерним/членом/родственником MySettings.

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

Есть идеи?

Почему вы не можете просто получить доступ к дочерним элементам, используя что-то вроде Setting.objects.filter(group=SettingsGroup.objects.get(name={name}))

При представлении в шаблоне вы можете передать имя SettingsGroup в контекст и перебирать дочерние группы и представлять их так, как вам нравится.

Возможно, я не совсем понял ваш вопрос, так что если это не то, что вы ищете, дайте мне знать!

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