Django: Получение всех инлайн-объектов в save_model администратора

У меня есть две связанные (через foreignKey отношение) модели и созданная модель администратора для родительской модели с инлайнами. В определенном случае мне нужно получить все связанные модели и использовать их для обновления 1 конкретного поля в родительской модели. Какой эффективный способ это сделать?

Мои модели:

class ParentModel(BaseModel):
    text = models.CharField() // This is generated from inline children's data
    ...

class ChildModel(BaseModel):
    parent = models.ForeignKey(ParentModel, on_delete=models.RESTRICT)
    ...

class ChildModelInline(TabularInline):
    model = ChildModel

class ParentModelAdmin(admin.ModelAdmin):
    inlines = [ChildModelInline]
    ...

Что я хочу, так это что-то похожее на это:

class ParentModelAdmin(admin.ModelAdmin):
    inlines = [ChildModelInline]
    ...

    def save_model(self, request, obj, form, change):
        inline_objects = <get_all_inline_objects>
        obj.text = <generate_text(inline_objects)>

        super(ParentModelAdmin, self).save_model(request, obj, form, change)

Метод save_model выполняется до сохранения связанных объектов. Это очевидно, поскольку связанные объекты должны ссылаться на первичный ключ модели.

Вы, вероятно, ищете метод save_related.


class ParentModelAdmin(admin.ModelAdmin):

    def save_related(self, request, form, formsets, change):
        super(ParentModelAdmin, self).save_related(self, request, form, formsets, change):
        # form.instance stores the saved object
        form.instance.text = ...
        form.instance.save() 


Вернуться на верх