Администратор Django: как скрыть вложенную строку до тех пор, пока родительский элемент не будет сохранен?Python

Программы на Python
Ответить
Anonymous
 Администратор Django: как скрыть вложенную строку до тех пор, пока родительский элемент не будет сохранен?

Сообщение Anonymous »

Я использую django-nested-admin
У меня есть вложенная встроенная настройка в администраторе Django, где я хочу скрыть дочерний встроенный элемент до тех пор, пока не появится его родительский элемент. сохраняется. Вот упрощенная версия моих моделей:

Код: Выделить всё

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 отображался только после того, как
    компонент
    сохранено
Желаемое поведение
  • Встроенные настройки компонентов должны быть скрыты при добавлении нового компонента
  • Встроенные настройки компонента должны появляться только после
    сохранения компонента
  • Встроенные настройки компонентов должны быть видны при редактировании существующего
    Компонент
Что я пробовал
  • переопределить get_inlines(), но это не работает, потому что вnestedInlines он вызывается один раз при загрузке страницы, поэтому мы не можем адаптировать его поведение в отношении того, что родительский элемент создан или нет
  • Использование свойства шаблона для вернуть пустую строку или пустой шаблон
  • Использование has_add_permission и get_queryset

    < li>Проверка существования родительского экземпляра
Ни один из этих подходов не работает полностью — либо встроенный элемент всегда виден или всегда скрыт.
Вопрос
Как правильно скрыть вложенный встроенный элемент (ComponentSetting) до тех пор, пока его родительский элемент (Компонент) не будет сохранен?
Я использую:
  • Django 4.2
  • django-nested-admin
  • Python 3.10
Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/792 ... t-is-saved
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»