由于不确定什么是正确的语法,我在尝试实现基于删除功能的视图时遇到了麻烦。
到目前为止,这是我正在使用的方法:
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'),
答案 0 :(得分:0)
您的网址中有一个post_id
,该ID会将ID传递给您的视图(也收到了该视图)。
因此,如果您要删除网址中带有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数据从您的模板。