Мне кажется, я немного лучше понимаю ваш вопрос - вы хотите воздействовать на реальные объекты, которые заполняются в встроенные формы, и скрывать определенные объекты на основе содержимого свойства body_message
. В этом случае вы можете переопределить метод InlineModelAdmin.get_queryset
, который даст вам возможность исключить определенные элементы; или метод ModelAdmin.get_inline_formsets
, который дает вам возможность изменять формы, которые будут сгенерированы для встроенных объектов:
from django.contrib.admin.options import TabularInline
class EmailInline(TabularInline):
model = Email
# If you want to manipulate the query used to select the related objects:
def get_queryset(self, request):
queryset = super(EmailInline, self).get_queryset(request)
modified_queryset = queryset.exclude(body_message__contains='some string')
return modified_queryset
class RequestAdmin(admin.ModelAdmin):
inlines = [EmailInline, ]
# If you wanted to manipulate the inline forms, to make one of the fields read-only:
def get_inline_formsets(self, request, formsets, inline_instances, obj=None):
inline_admin_formsets = []
for inline, formset in zip(inline_instances, formsets):
fieldsets = list(inline.get_fieldsets(request, obj))
readonly = list(inline.get_readonly_fields(request, obj))
prepopulated = dict(inline.get_prepopulated_fields(request, obj))
inline_admin_formset = helpers.InlineAdminFormSet(
inline, formset, fieldsets, prepopulated, readonly,
model_admin=self,
)
# Custom code here - analyze the forms/objects, make changes to the form if desired:
if isinstance(inline, EmailInline):
for form in inline_admin_formset.forms:
if 'some string' in form.instance.body_message:
# this adds the "readonly" attribute to the input widget for the `body_message` field:
form.fields['body_message'].widget.attrs['readonly'] = True
inline_admin_formsets.append(inline_admin_formset)
return inline_admin_formsets