【问题标题】:count the number of posts by a user - django [closed]计算用户的帖子数量 - django [关闭]
【发布时间】:2018-10-27 20:10:28
【问题描述】:

我正在尝试克隆一个社交媒体网站。如何统计特定用户的帖子总数?

models.py

from django.db import models
from django.utils import timezone
from django.urls import reverse
from django.conf import settings
from django.utils.text import slugify
from blog.utils import unique_slug_generator
from django.contrib.auth import get_user_model
import uuid
User = get_user_model()

class Post(models.Model):
    author = models.ForeignKey(User, on_delete = models.CASCADE)
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True, blank=True, default=uuid.uuid1)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)
    likes = models.ManyToManyField(User, related_name='post_likes', blank = True)

def get_like_url(self):
    return reverse("posts:like-toggle", kwargs={"slug": self.slug})

def get_api_like_url(self):
    return reverse("posts:like-api-toggle", kwargs={"slug": self.slug})

def publish(self):
    self.published_date = timezone.now()
    self.save()

def approve_comments(self):
    return self.comments.filter(approved_comment=True)

def get_absolute_url(self):
    return reverse("post_detail",kwargs={'pk':self.pk})

def __str__(self):
    return self.title

【问题讨论】:

  • 请修正您的代码缩进。

标签: python django


【解决方案1】:

构造查询

对于给定的用户,您可以通过以下方式计算帖子:

def count_posts_of(user):
    return Post.objects.filter(author=user).count()

因此,我们获取所有Post 对象的集合,我们.filter(..) 该集合使得author 应该是给定的user,然后我们对其执行.count() 以计算其中的数字那一套。

为特定视图渲染

如果我们希望针对特定视图使用此功能,例如,我们可以计算登录用户的帖子数:

def num_post(request):
    num_post = Post.objects.filter(author=request.user).count()
    return render(request, 'some_template.html', {'num_post': num_post})

我们现在可以使用{{ num_post }} 访问模板中的变量,并按照我们想要的方式呈现它。

【讨论】:

  • 它应该在 views.py 中?我应该如何在我的模板中显示它?
  • @user2:这取决于你想渲染多少次。如果只是为了那个视图,你确实可以将它包含在上下文中。
  • 这在查询集中是如何工作的?这就是我坚持stackoverflow.com/questions/61951419/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多