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