2

У меня есть модель «Продукт» и многие другие модели, которые имеют свой внешний ключ как Продукт. В настоящее время я ProductAdmin линии этоОтключить/Скрыть ненужные встроенные формы в django admin

class Product: 
    type_of_product=models.ChoiceField() 

class ProductAdmin(admin.ModelAdmin): 
    form = ProductAdminForm 
    inlines = [Inline1, Inline2, Inline3, Inline4,....Inline 15] 

Так админы продукта добавить страницу выглядит очень большая форму. Здесь мне нужно заполнить только некоторые из моделей строк в зависимости от значения type_of_product. Так много записей встроенных моделей пустые.

Таким образом, в основном встроенные линии связаны с атрибутом type_of_product продукта. В настоящее время пользователь должен заботиться о том, в каких строках он должен заполнять значения в соответствии с тем, что он выбрал как type_of_product.

Теперь я хочу разобраться.

Вариант 1) Динамическая визуализация встраивает форм в соответствии с тем, что пользователь выбрал в качестве type_of_product через AJAX. (Не знаю, как это сделать)

Вариант 2) Отключить или скрыть ненужные Внутристрочные так что он может» см. встроенные формы несвязанных моделей.

Может кто-нибудь помочь разобраться в этом.

ответ

4

Вы можете изменить встроенные линии в зависимости от текущего объекта, просто переопределить change_view метод ModelAdmin. В вашем ProductAdmin добавить что-то вроде этого:

def change_view(self, request, object_id, form_url='', extra_context=None): 
    product = Product.objects.get(pk=object_id) 
    current_inlines = [] 
    # CODE TO FILL INLINES BASED ON PRODUCT 
    self.inlines = current_inlines 
    return super(ProductAdmin, self).change_view(request, object_id, form_url, extra_context=extra_context) 
+0

Спасибо за ответ. Я также думал об этом, но хочу сделать это динамически. SO первоначально, когда загружается Администратор продукта, все строки должны быть там, но когда пользователь выбирает атрибут type_of _field для продукта, другие нерелевантные строки должны быть скрыты. У меня есть фиксированное сопоставление для type_of_field vs inlines для отображения – user3265443

+1

OK, поэтому, если вы хотите сделать это таким образом, вам придется расширять шаблон по умолчанию для этого конкретного приложения и добавлять JavaScript для скрытия встроенных групп при изменении типа 'type_of_product'. Каждая строка имеет уникальный идентификатор (например, 'INLINE-MODEL_set-group'), поэтому это должно быть довольно просто. –

Смежные вопросы