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)
Вернуться на верх