Django Inline Tabular admin: удаление объекта не работает

Я использую класс Django admin.TabularInline для того, чтобы добавить несколько объектов в отношения Foreinkey, как показано ниже:

admin.py:

class HeadFlowDatasetInline(admin.TabularInline):
    model = HeadFlowDataset
    extra = 0

class ProductAdmin(admin.ModelAdmin):
    list_display = (
        ...
    )
    search_fields = (
        ...
    )
    fields = (
        ...
    )
    inlines = [HeadFlowDatasetInline]

    def save_model(self, request, obj, form, change):
        obj.created_by = request.user
        obj.last_updated_by = request.user
        obj.save()

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

И для этой цели такой подход работает просто отлично. Но проблема возникает, когда я пытаюсь удалить объект HeadFlowDataset со страницы add product object. Как показано на рисунке ниже, перед каждым объектом HeadFlowDataset стоит флажок, но его установка и сохранение не работают. Я не смог найти никакого другого способа заставить это работать. Может ли кто-нибудь показать мне способ сделать это? enter image description here

поскольку вы установили commit в False, то операции не выполняются по умолчанию, такие как delete и save, вы можете использовать formset.deleted_objects для итерации и удаления, если у вас есть разрешение на удаление

В вашем случае вы используете commit = False для применения логики в процессе сохранения. Если вы удалите его, вы потеряете логику.

Я бы попробовал следующее:

def save_formset(self, request, form, formset, change):
        for item in formset.cleaned_data:
            delete = item.get("DELETE")
            if delete:
                item["id"].delete()
            continue
        instances = formset.save(commit=False)
        for instance in instances:
            instance.user = request.user
            instance.save()
Вернуться на верх