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

Django中UpdateView删除功能异常:点击删除反而重复创建条目

股票交易Django应用删除功能异常:点击删除按钮重复创建条目而非删除

我开发了一款记录股票交易的Django应用,用户从首页点击单条日志条目后,进入由UpdateView处理的详情页(single_entry.html),在此页面可编辑更新条目信息,也可删除该条目。为实现删除功能,已从django.views.generic.edit导入DeletionMixin模块,但点击删除按钮时,目标条目未被删除反而被重复创建!以下是相关代码,恳请帮忙排查原因:

views.py代码

class SingleEntryView(UpdateView):
  template_name = "single_entry.html"
  model = Entry
  fields = ['ticker', 'strategy', 'result', 'comments', 'image']
  success_url = '/'
    
  def post(self, request, *args, **kwargs):
    if "delete_button" in self.request.POST:
      return self.delete(request, *args, **kwargs)
    
  def update_post(self, form, pk):
    if "update_button" in self.request.POST:
      form.instance.user = self.request.user
    return super(SingleEntryView, self).update_post(form)

single_entry.html代码

{% extends 'base.html' %}

{% block title %}
    Trading Journal - Entry
{% endblock title %}Trading Journal

{% block content %}

<form method="POST" action="/">
    {% csrf_token %}
    {% for field in form %}
        {{field.label_tag}}
        {{field}}
        {% if field.errors %}
            <small class="error">{{ field.errors|striptags }}</small>            
        {% endif %}
    {% endfor %}
    <button type="submit" name="update_button">Save</button>
    <button type="submit" name="delete_button">Delete</button>
    
</form>

<img src="{{ entry.image.url }}" alt="{{ entry.result }}">

{% endblock content %}

urls.py代码

from django.urls import path
from django.contrib import admin
from . import views

urlpatterns = [
    path("", views.EntryView.as_view()),
    path("entries/<int:pk>/", views.SingleEntryView.as_view(), name="single-entry"),
    path("admin/", admin.site.urls)
]

尝试过的ChatGPT推荐代码(问题依旧)

def post(request, self, form):
    print("post request")
    print("request.post", request.POST)
    if "delete" in request.POST:
      print("delete found")
      return self.delete_entry()
    else:
      print("else statement")
      #return super(SingleEntryView, self).post(request, form)

      return super().post(request, form)
      #return super().post(request, *args, **kwargs)      

def delete_entry(self):
    entry = self.get_object()
    print("get object")
    entry.delete()
    messages.success(self.request, "Your entry was deleted successfully.")
    return redirect("/")

models.py代码

from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
from django.urls import reverse
from django.utils.text import slugify


class Entry(models.Model):
    ONEORB="1-Min ORB"
    FIVEORB="5-Min ORB"
    ABCD="ABCD"
    REVERSAL="Reversal"
    PROFIT="Profit"
    LOSS="Loss"
    RESULT_CHOICES = (
        (PROFIT, "Profit"),
        (LOSS, "Loss")
    )
    STRATEGY_CHOICES = (
        (ONEORB,"1-Min ORB"),
        (FIVEORB,"5-Min ORB"),
        (ABCD,"ABCD"),
        (REVERSAL,"Reversal")
    )

    entered_date=models.DateField(auto_now_add=True)
    ticker=models.CharField(max_length=8, default="")
    strategy=models.CharField(max_length=12, choices=STRATEGY_CHOICES, default="ONEORB")
    result=models.CharField(max_length=6, choices=RESULT_CHOICES, default="PROFIT")
    comments=models.TextField(max_length=300, blank=True)
    image = models.ImageField(upload_to="", null=True, blank=True) #will save to default BASE_DIR which is 'uploads'

    def __str__(self):
        return f"{self.result} {self.entered_date}"

内容的提问来源于stack exchange,提问作者Andre Di Carlo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:44