Django编辑用户的帖子

时间:2015-04-10 14:51:51

标签: django

我正在使用django在博客应用程序中工作。用户可以添加帖子并编辑自己的帖子。但是,我在检索用户帖子时遇到问题。这是一个类似的问题,但它不适用于我的应用程序:Django edit form based on add form?任何帮助都非常感谢

这是我的代码:

@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).......

1 个答案:

答案 0 :(得分:0)

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

通常,author字段将是对用户的ForeignKey,因此对于当前用户创作的帖子,比较将为真。如果您将用户名放入author字段,则可以将其与if post.author != request.user.username进行比较 - 但我真的不建议这样做,因为您没有充分理由违反规范化。

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