Django如何删除仅属于某个用户的文章?

时间:2016-01-28 01:44:02

标签: python django

我正在尝试在我的博客中创建一个删除按钮,但我不知道如何让用户只删除他自己的文章。

我在考虑这样的事情:

views.py

@login_required(login_url='/user')
def article_effacer(request, slug):
    if request.user.is_authenticated():
        user = request.user
        article = get_object_or_404(Article, slug=slug)

        if [check if article belongs to the user]:
            article.delete()
        else:
            pass
    else:
        return HttpResponseForbidden()

template.html

<a class="delete" href='{% url "article.views.article_effacer" a.slug %}'>Effacer</a>

models.py

class Article(models.Model):
    user = models.ForeignKey(User, default='1')
    titre = models.CharField(max_length=100, unique=True)
    summary = models.TextField(max_length=266)
    contenu = models.TextField(max_length=2000)
    slug = models.SlugField(max_length=40)
    likes = models.ManyToManyField(User, related_name="likes")

    def __str__(self):
        return self.titre

    [... unrelated code ...]

如果文章不属于他们,我也不想向其他用户显示 template.html 删除按钮,我该怎么办?

2 个答案:

答案 0 :(得分:1)

我会尝试这样的事情:

@login_required(login_url='/user')
def article_effacer(request, slug):
    if request.user.is_authenticated():
        user = request.user
        Article.objects.filter(slug=slug, user=user).delete()
    else:
        return HttpResponseForbidden()

然而,这里有一个明显的危险:我不记得SlugField在django中是否是独一无二的,但我不相信它是基于对文档的快速浏览。这意味着回收slug的用户在点击此视图时会删除所有带有该slug的文章。可能不是你想要的。 如果我正在实现这样的东西,我会研究这个并确保slugs在我的模型中是独一无二的。

答案 1 :(得分:1)

views.py

 @login_required(login_url='/user')
 def article_effacer(request, slug):
    if request.user.is_authenticated():
        user = request.user
        article = get_object_or_404(Article, slug=slug)

        if article.user == user:
            article.delete()
    else:
        return HttpResponseForbidden()

templates.html

{% if a.user == user %}<a class="delete" href='{% url "article.views.article_effacer" a.slug %}'>Effacer</a>{% endif %}