Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django编辑用户';s职位_Django - Fatal编程技术网

Django编辑用户';s职位

Django编辑用户';s职位,django,Django,我在使用django的博客应用程序中工作。用户可以添加帖子和编辑自己的帖子。然而,我在检索用户的帖子时遇到了麻烦。这里有一个类似的问题,但它不适用于我的应用程序:任何帮助都是非常感谢的 这是我的密码: @login_required def edit(request, id): if id: post = get_object_or_404(BlogPost, id=id) if post.author != request.user:

我在使用django的博客应用程序中工作。用户可以添加帖子和编辑自己的帖子。然而,我在检索用户的帖子时遇到了麻烦。这里有一个类似的问题,但它不适用于我的应用程序:任何帮助都是非常感谢的

这是我的密码:

@login_required
def edit(request, id):
    if id:
        post = get_object_or_404(BlogPost, id=id)
        if post.author != request.user:
            return render(request, "403.html")
        else:
            post = BlogPost(author=request.user)

    if request.method == "POST":
        form = AddPost(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            messages.add_message(request, messages.SUCCESS,
                                 'You have succesfully updated your post')
            return redirect('homepage')
    else:
        form = AddPost(instance=post)
    return render(request, 'blog/update.html', {'form': form})
这是我的模型:

class BlogPost(models.Model):
    title = models.CharField(
        max_length=100, null=False, blank=False, unique=True)
    content = models.TextField()
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)
    author = models.CharField(max_length=50).......

您的
作者
字段是CharField。我不确定您在该字段中输入了什么,或者如何设置它,但它永远不会等于
request.user
,因为这是您的用户模型的一个实例

通常,
author
字段是用户的外键,因此对于当前用户编写的文章,比较结果是正确的。如果您将用户名放入
author
字段,您可以与之比较:
If post.author!=request.user.username
——但我真的不建议这样做,因为你没有充分的理由破坏规范化


(还请注意我的其他评论:您的第一个else子句看起来应该是左边的一个缩进:即在
if id
下,而不是
if post.author…

您的标题意味着Django正在编辑您用户的帖子。或者,这是一个预加标签,应该删除吗?在任何情况下,请编辑以在标题中提出更具体的问题。有一个有用的教程。它从基础开始,然后增加了更多的困难。我记得有一种东西和你的一样。。你必须寻找。我不确定你真正的问题是什么。你说你“有麻烦”-这是什么意思?到底出了什么问题?我不知道这是否是你的问题(因为我不知道你的问题到底是什么),但是你的第一个
else
子句看起来应该是向左缩进一个:即在
if id
下面,不
如果post.author…
@DanielRoseman即使我看到一个用户登录并试图编辑属于该特定用户的帖子,它也会返回403.html。作者应该等于该用户的姓名。你对查菲尔德的看法完全正确,我不需要它