Как изменить неизмененную модель администратора inlines?

Своего рода дубликат обоих:

Но мне все еще интересно, есть ли лучший способ сделать это в последующих обновлениях Django?

Я задался целью модифицировать свои инлайн-объекты в стеке model admin (до или после сохранения, не имеет значения) при изменении родительского экземпляра model admin. Я попробовал переопределить save_formset и save_related в классе model admin, как написано в документации Django здесь и здесь, используя commit=False. Например:

def save_formset(self, request, form, formset, change):
    instances = formset.save(commit=False)
    for instance in instances:
       instance.any_field = "value"
       instance.save()

Метод formset.save(commit=False) возвращает инлайн-объекты формы, только если они изменены на панели администратора Django, как указано в django docs, но он не возвращает список инлайн-объектов, если они не изменены, даже после отправки commit=False. Мне нужно отредактировать эти инлайн объекты независимо от того, были ли они изменены на панели администратора или нет.

Я не смог найти законный способ предварительной обработки этих неизменных инлайн-форм перед сохранением. Поэтому я решил сделать обработку после сохранения.

def save_formset(self, request, form, formset, change):
    super().save_formset(request, form, formset, change)
    forms = formset.forms
    for form in forms:
        obj = form.instance
        # Do anything with obj
        obj.save()
Вернуться на верх