Как отобразить список дочерних объектов в детальном представлении для 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 в контекст и перебирать дочерние группы и представлять их так, как вам нравится.
Возможно, я не совсем понял ваш вопрос, так что если это не то, что вы ищете, дайте мне знать!