我是django的新手,我正在尝试制作一个Web应用程序。我有此页面page image,我想按删除按钮时删除一条帖子。我怎样才能做到这一点?这是我的'Post'模式:
class Post(models.Model):
created_date = models.DateTimeField()
title = models.CharField(max_length=100)
profile_image = models.ImageField(upload_to='poze', blank=True, null=True)
text = models.CharField(max_length=1000, default='Nimic', blank=True)
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
我一直在寻找删除方法,但是我总是找到仅表单的方法,并且我不使用表单。谢谢。
答案 0 :(得分:3)
在您的html中:
<a href="{% url 'delete' p.id %}">Delete</a>
假设您正在使用for循环:
{% for p in posts %}
在您的网址中:
path('delete/<post_id>',views.delete_post,name='delete')
您认为:
def delete_post(request,post_id=None):
post_to_delete=Post.objects.get(id=post_id)
post_to_delete.delete()
return HttpResponseRedirect(#name of the view function that returns your posts page)
就是这样
编辑
此方法直接从数据库中删除数据。因此,我建议您将@login_required装饰器添加到delete_post视图函数中以保护您的帖子。您还可以使其仅对html中的管理员用户或帖子所有者可用(例如:只有具有职员角色的用户才能看到删除链接)
{% if user.is_staff %}
<a ...>Delete</a>
{% endif %}
答案 1 :(得分:1)
您应该在数据库表中创建一个新字段。每当删除数据时,都应更改删除字段。
class Post(models.Model):
created_date = models.DateTimeField()
title = models.CharField(max_length=100)
profile_image = models.ImageField(upload_to='poze', blank=True, null=True)
text = models.CharField(max_length=1000, default='Nimic', blank=True)
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
delete_flag = models.BooleanField(default=False)
只要有数据就应该在删除标志上过滤数据
Post.objects.filter(delete_flag = False)
尽管这是主观的,我不知道您会用例,但作为初学者,最好还是从这种做法开始。
答案 2 :(得分:0)
您需要传递带有帖子ID的参数。想要这样的东西
p = Post.objects.get(pk=2)
p.delete()