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
相关产品推荐
相关产品推荐

