django - 如何使用基于函数的视图删除对象?
问题描述
我在尝试实现基于删除函数的视图时遇到了麻烦,因为我不确定什么是正确的语法。
到目前为止,这是我正在使用的方法:
def delete_lesson(request, post_id):
if request.method == 'POST':
lesson = Lesson.objects.get(post_id=request.get('post_id'))
lesson.delete()
return redirect('/')
我已经在我的模型中实现了删除功能:
class Lesson(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to="lesson/pdf")
date_posted = models.DateTimeField(default=timezone.now)
post = models.ForeignKey(Post, on_delete=models.CASCADE, null=False, blank=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('lesson_upload', kwargs={'pk': self.pk})
def delete(self, *args, **kwargs):
self.file.delete()
self.title.delete()
super().delete(*args, **kwargs)
class Post(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(default = 'default0.jpg', upload_to='course_image/')
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=6)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
rating = models.IntegerField(default = 0)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk' : self.pk})
我的 urls.py:
path('post/<int:post_id>/lesson_delete/', views.delete_lesson, name='delete_lesson'),
解决方案
您的 URL 中有一个post_id
将 id 传递给您也收到的视图。
因此,如果您想删除 URL 中带有 id 的帖子,那么您可以这样做:
lesson = Lesson.objects.get(post_id=post_id)
如果出于任何原因,您从模板中获得了一个帖子 ID,并且它与您的 URL 中的帖子 ID 不同,那么您应该这样做:
Lesson.objects.get(post_id=request.POST.get('post_id'))
请注意,如果您使用的第二个选项与post_id
您想要删除的选项不同,post/<int:post_id>/lesson_delete/
那么您应该post_id
从模板中将 POST 数据作为 POST 数据传递。
推荐阅读
- c# - JIT 编译器及其在 C++ 前加速 .net 中程序执行的好处
- python - 比较python中两个列表中的元素
- python - 无法在 Python 上运行 signalR 客户端
- c# - 如何画一个(值)%的圆
- terraform - 基于 terraform 中 count.index 的属性差异
- spring-integration - spring-integration:Webflux inboundGateway 未映射到请求
- function - 向量不在c++范围内
- python - 使用 python 下载图像
- javascript - 具有 d3.js 和高度属性的响应式 SVG
- java - 我可以通过 spring-boot 轻松替换 spring-boot-starter 以避免使用 spring-boot-starter-parent 吗?