我正在使用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).......
答案 0 :(得分:0)
您的author
字段是CharField。我不确定你在这个领域投入了什么,或者你如何设置它,但它永远不会等于request.user
,因为那是你的用户模型的一个实例。
通常,author
字段将是对用户的ForeignKey,因此对于当前用户创作的帖子,比较将为真。如果您将用户名放入author
字段,则可以将其与if post.author != request.user.username
进行比较 - 但我真的不建议这样做,因为您没有充分理由违反规范化。
(另请注意我的其他评论:你的第一个else子句看起来应该是左边的一个缩进:即if id
下,而不是if post.author...
。)