在Django中删除帖子

时间:2018-08-10 08:05:05

标签: python django

我是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)

我一直在寻找删除方法,但是我总是找到仅表单的方法,并且我不使用表单。谢谢。

3 个答案:

答案 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)

尽管这是主观的,我不知道您会用例,但作为初学者,最好还是从这种做法开始。

Read More

Article 2

答案 2 :(得分:0)

您需要传递带有帖子ID的参数。想要这样的东西

p = Post.objects.get(pk=2)
p.delete()