Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django如何删除仅属于某个用户的文章?_Python_Django - Fatal编程技术网

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

Python Django如何删除仅属于某个用户的文章?,python,django,Python,Django,我试图在我的博客中创建一个删除按钮,但我不知道如何让用户只删除他自己的文章 我在想这样的事情: @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()

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

我在想这样的事情:

@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()
视图.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()
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

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

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

我会尝试以下方法:

@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在我的模型中是唯一的

我想试试这样的东西:

@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在我的模型中是唯一的

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 %}
{%if a.user==user%}{%endif%}
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 %}
{%if a.user==user%}{%endif%}


你能添加你的
模型吗?py
?@RodXavier是的,刚刚添加了。
article=get\u object\u或_404(article,slug=slug)
返回一个对象,而不是查询集。因此,
article.filter
将不起作用。@karthikr是的,这就是我正在努力的地方,我不知道如何连接用户和文章。@Sia除此之外,如果article.objects.filter(id=user.id,pk=id).exists():id此时没有值,所以不能用作右边的值。请添加您的
模型.py
?@RodXavier是的,刚刚添加了。
article=get\u object\u或_404(article,slug=slug)
返回一个对象,而不是查询集。因此,
article.filter
将不起作用。@karthikr是的,这就是我正在努力的地方,我不知道如何连接用户和文章。@Sia除此之外,
if article.objects.filter(id=user.id,pk=id.exists():
id此时没有值,因此不能用作右边值。slug是唯一的,如果我删除一篇文章,所有的东西都应该被删除。另外
Article.filter(slug=slug,user=user).delete()
return
type对象“Article”没有属性“filter”
对不起,我的坏消息。编辑谢谢这个答案,它工作得很好,现在我怎么能不在模板中向未知用户显示“删除”按钮呢?这听起来像是另一个问题,需要查看其他代码。但一般来说,您将检查当前用户是否==article.user,并且仅在该情况下显示按钮。但是,有很多方法可以做到这一点,所以我不想在对这个问题的评论中深入讨论。slug是独一无二的,如果我删除一篇文章,所有内容都应该删除slug。另外
Article.filter(slug=slug,user=user).delete()
return
type对象“Article”没有属性“filter”
对不起,我的坏消息。编辑谢谢这个答案,它工作得很好,现在我怎么能不在模板中向未知用户显示“删除”按钮呢?这听起来像是另一个问题,需要查看其他代码。但一般来说,您将检查当前用户是否==article.user,并且仅在该情况下显示按钮。不过,有很多方法可以解决这个问题,所以我不想在对这个问题的评论中对此进行探讨。