You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:10:14