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
стоит флажок, но его установка и сохранение не работают. Я не смог найти никакого другого способа заставить это работать. Может ли кто-нибудь показать мне способ сделать это?
поскольку вы установили 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()