【发布时间】:2023-03-17 04:34:01
【问题描述】:
我觉得我真的很接近了,但还不是很接近。请多多包涵,因为我还处于学习 django 的初级阶段。
我有一个功能,用户可以对每篇博文发表评论。我想在他的名字旁边显示每个用户拥有的 cmets 总数。如果该用户在 4 个不同的帖子上留下了 4 个 cmets,我希望它在我网站上的每个个人 cmets 上的他的名字旁边显示“4 个 cmets”。
我已经制作了一个模型方法,我把它放在我的视图中,它会自动更新每个用户的总 cmets。唯一的问题是,如果用户留下了两个 cmets,则只有他的最新评论会显示“2 total cmets”。他的前一个只显示“1”。
我的问题是,当用户留下新评论时,如何更新之前的条目?
models.py
class Comment(models.Model):
...
post = models.ForeignKey(Post, related_name="comments")
user = models.ForeignKey(User, related_name="usernamee")
email = models.EmailField(null=True, blank=True)
picture = models.TextField(max_length=1000)
...
review_count = models.IntegerField(default=0)
class UserProfile(models.Model):
...
def user_rating_count(self): #This is what adds "1" to the user's total post count
user_ratings =
Comment.objects.all().filter(user_id=self.user.id).count()
user_ratings += 1
return user_ratings
views.py
@login_required
def add_comment(request, slug):
post = get_object_or_404(Post, slug=slug)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.user = request.user
comment.email = request.user.email
comment.picture = request.user.profile.profile_image_url()
comment.review_count = request.user.profile.user_rating_count() #This is where I'd like it to update, but it doesn't seem to work this way
comment.save()
return redirect('blog:post_detail', slug=post.slug)
else:
form = CommentForm()
template = "blog/post/add_comment.html"
context = {
'form': form,
}
return render(request, template, context)
模板
{% for comment in post.comments.all %}
<p>{{ comment.user.first_name }} <b>{{ comment.user.last_name }}</b> {{ comment.review_count }}</p>
{% endfor %}
用户 cmets 一次 = FirstName LastName 1。 用户 cets 两次,他的第二条评论 = FirstName LastName 2,但第一条评论保持不变。
关于如何正确执行此操作的任何想法?非常感谢任何帮助!
【问题讨论】:
标签: python django django-forms django-templates django-views