Django中DeleteView无法删除数据的问题排查求助
Django DeleteView无法删除数据的解决方案
问题根源
你在DeleteCardView中错误指定了form_class = CardForm,而Django的DeleteView(结合DeletionMixin)默认不需要ModelForm处理删除操作。当自定义表单被指定后,Django会要求POST请求携带该表单的所有字段数据,但你的删除模板仅渲染了提交按钮,缺少表单字段导致验证失败,最终未执行删除逻辑。
添加{{ form }}后,表单字段被渲染,POST请求携带了必要的表单数据(即使这些数据对删除无意义),验证通过后删除逻辑才得以执行。
解决方案
方案1:移除form_class属性(推荐)
直接删除DeleteCardView中的form_class配置,让DeleteView使用默认的删除逻辑:
修改microtarjetas/views.py:
class DeleteCardView(DeleteView): model = Card template_name = 'microtarjetas/delete_card.html' # 移除form_class = CardForm这一行 success_url = '/cards/'
方案2:使用空表单(仅作参考)
若一定要保留form_class,可自定义无字段的表单避免多余输入框:
修改forms.py:
from django import forms from .models import Card # 新增空删除表单 class CardDeleteForm(forms.Form): pass class CardForm(forms.ModelForm): class Meta: model = Card fields = "__all__"
修改DeleteCardView:
class DeleteCardView(DeleteView): model = Card template_name = 'microtarjetas/delete_card.html' form_class = CardDeleteForm # 使用空表单 success_url = '/cards/'
验证
修改完成后,点击删除链接进入确认页,点击"Confirm"按钮,页面将跳转到success_url,数据库中对应条目会被正确删除。
内容的提问来源于stack exchange,提问作者Bandido
相关产品推荐
相关产品推荐

