Python 删除Django中的帖子

Python 删除Django中的帖子,python,django,Python,Django,我是django的新手,我正在尝试制作一个web应用程序。我有这个页面,我想在按下删除按钮时删除一篇文章。我该怎么做?这是我对“Post”的模式: class Post(models.Model): created_date = models.DateTimeField() title = models.CharField(max_length=100) profile_image = models.ImageField(upload_to='poze', blank=T

我是django的新手,我正在尝试制作一个web应用程序。我有这个页面,我想在按下删除按钮时删除一篇文章。我该怎么做?这是我对“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)
我一直在寻找delete方法,但我总是找到只使用表单的方法,而不使用表单。谢谢。

在您的html中:

<a href="{% url 'delete' p.id %}">Delete</a>
在您的URL中:

path('delete/<post_id>',views.delete_post,name='delete')
就这样

编辑

此方法直接从数据库中删除数据。因此,我建议您将@login\u required decorator添加到delete\u post view函数中,以保护您的帖子。您还可以使其仅对html中的管理员用户或帖子所有者可访问(例如:只有具有staff角色的用户才能查看删除链接)

{%if user.is_staff%}
删除
{%endif%}
在html中:

<a href="{% url 'delete' p.id %}">Delete</a>
在您的URL中:

path('delete/<post_id>',views.delete_post,name='delete')
就这样

编辑

此方法直接从数据库中删除数据。因此,我建议您将@login\u required decorator添加到delete\u post view函数中,以保护您的帖子。您还可以使其仅对html中的管理员用户或帖子所有者可访问(例如:只有具有staff角色的用户才能查看删除链接)

{%if user.is_staff%}
删除
{%endif%}

您需要传递带有post id的参数。它可能是这样的

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

您需要用post id传递参数。它会像这样

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

您应该在数据库表中创建一个新字段。无论何时删除数据,都应更改删除字段

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_标志=False)

虽然这是主观的,我不知道你们的用例,但作为一个初学者,最好从这个练习开始


您应该在数据库表中创建一个新字段。无论何时删除数据,都应更改删除字段

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_标志=False)

虽然这是主观的,我不知道你们的用例,但作为一个初学者,最好从这个练习开始


使用
Post.objects.filter(pk=Post\u id).delete()
删除使用
Post.objects.filter(pk=Post\u id).delete()
删除这是非常不安全的,因为每个人都可以调用这些URL,帖子将被删除。至少添加一个“login_required”更好的方法是检查帖子的所有者,并添加一个额外的“if request.user=owner…delete()”当然,他会根据自己的需要添加这些内容。我只是解释了过程,最终这就是他要求的。我根据你的评论编辑了我的答案,谢谢。是的,我只是想澄清一下,有些人只是简单地“复制并粘贴”代码,如果没有任何用户验证的检查,这一部分可能会很危险。很高兴你编辑了它:)完全同意!这是非常不安全的,因为每个人都可以调用这些URL,帖子将被删除。至少添加一个“login_required”更好的方法是检查帖子的所有者,并添加一个额外的“if request.user=owner…delete()”当然,他会根据自己的需要添加这些内容。我只是解释了过程,最终这就是他要求的。我根据你的评论编辑了我的答案,谢谢。是的,我只是想澄清一下,有些人只是简单地“复制并粘贴”代码,如果没有任何用户验证的检查,这一部分可能会很危险。很高兴你编辑了它:)完全同意!为了实现安全删除,Django safedelete是一个不错的选择。为了实现安全删除,Django safedelete是一个不错的选择。