Удаление объекта с помощью django inline_formset
Я пытаюсь создать страницу, позволяющую владельцу ресторана редактировать/удалять пункты из своего меню.
Models.py:
class Restaurant(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
name = models.CharField(max_length=200, verbose_name = 'Restaurant Name')
class Menu(models.Model):
restaurant = models.OneToOneField(
Restaurant,
on_delete=models.CASCADE,
primary_key=True,
)
class Item(models.Model):
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
views.py:
def test_url(request):
# Get this Restaurant object
restaurant = Restaurant.objects.get(pk = 1)
# Get this Restaurant's Menu object
restaurant = restaurant.menu
# Create inline formset
ItemFormSet = inlineformset_factory(Menu, Item, fields=('name', 'description',), max_num=1, extra=0, can_delete=True)
if request.method == 'POST':
formset = ItemFormSet(request.POST, instance = menu)
if formset.is_valid():
for form in formset:
form.save()
return HttpResponse(formset.cleaned_data) # referenced later in the question
else:
formset = ItemFormSet(instance = menu)
return render(request, 'restuarant/edit_menu.html', {
'formset': formset,
})
В документации указано, что атрибут can_delete: " добавляет новое поле к каждой форме с именем DELETE и является полем forms.BooleanField. Когда данные приходят через маркировку любого из полей удаления, вы можете получить к ним доступ с помощью deleted_forms". Это действительно добавляет поле delete в мой шаблон, и если я выберу этот флажок на одной из форм, он вернет:
{'name': 'Fried Calamari', 'description': '', 'id': , 'DELETE': True, 'menu': .RelatedManager object at 0x7fa644347a30>>>}
но сам объект никогда не удаляется (это представление правильно обновляет объекты). Я также читал, что формы с 'DELETE': True не проходят formset.is_valid(), поэтому я не уверен, почему я вижу данные, принадлежащие форме, которую я выбрал для удаления в HttpResponse. В любом случае, может ли кто-нибудь помочь мне действительно удалить объекты, помеченные для удаления? Спасибо.