Django Admin: Как скрыть вложенный инлайн до сохранения родителя?
Я использую django-nested-admin
У меня есть вложенные модели в Django Admin, где я хочу скрыть дочернюю модель в строке, пока ее родитель не будет сохранен. Вот упрощенная версия моих моделей:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
class Component(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
class ComponentSetting(models.Model):
component = models.ForeignKey(Component, on_delete=models.CASCADE)
key = models.CharField(max_length=255)
value = models.CharField(max_length=255)
А вот моя настройка администратора:
from django.contrib import admin
from nested_admin import NestedModelAdmin, NestedTabularInline
class ComponentSettingInline(NestedTabularInline):
model = ComponentSetting
extra = 0
class ComponentInline(NestedTabularInline):
model = Component
extra = 0
inlines = [ComponentSettingInline]
class ProductAdmin(NestedModelAdmin):
inlines = [ComponentInline]
admin.site.register(Product, ProductAdmin)
Текущее поведение
- При редактировании продукта я могу добавлять компоненты
- Вставка ComponentSetting видна сразу при добавлении нового компонента компонента
- Я хочу, чтобы строка ComponentSetting появлялась только после того, как компонент сохранялся
Желаемое поведение
Строка ComponentSetting должна быть скрыта при добавлении нового компонента
Строка ComponentSetting должна появляться только после сохранения компонента сохранения
Строка ComponentSetting должна быть видна при редактировании существующего компонента
Что я пробовал
Override get_inlines(), но это не работает, потому что для nestedInlines она вызывается один раз при загрузке страницы, поэтому мы не можем адаптировать ее поведение относительно того, создан родитель или нет
.Использование свойства template для возврата пустой строки или пустого шаблона
Использование has_add_permission и get_queryset
Проверка существования родительского экземпляра
Ни один из этих подходов полностью не работает - либо строка всегда видна, либо всегда скрыта.
Вопрос
Как правильно скрыть вложенный компонент (ComponentSetting) до сохранения его родителя (Component)?
Я использую:
- Django 4.2
- django-nested-admin
- Python 3.10
Любая помощь будет оценена по достоинству!
Переопределить метод .get_inlines(…)
[Django-doc]:
class ParentAdmin(NestedModelAdmin):
inlines = [ChildInline]
def get_inlines(self, request, obj):
if obj is None:
return []
return super().get_inlines(request, obj)