我有以下两种型号:
class User(models.Model):
user_id = models.IntegerField(null=True)
name = models.CharField(max_length=50)
class Blog(models.Model):
id = models.IntegerField(primary_key=True)
user = models.ForeignKey(User, null=True)
timestamp = models.DateTimeField()
如何编写Django模型查询以获取具有以下形式的对象列表 -
[(user_object, number of blog posts of this user), ...]
此列表应按降序排列。基本上,我想获取有关用户编写了多少博客文章的信息。
Incase,2位用户拥有相同数量的博客文章,我希望根据他们创建的博客帖子的最新时间戳对其进行排序。
所以,到目前为止,我已经尝试了以下方法,并且在我的方法中仍然没有成功。
user = User.objects.all()
serializer = UserSerializer(user, many=True)
user = list(serializer.data)
user_ranks = [(key, len(list(group))) for key, group in groupby(user)]
user_ranks = sorted(user_ranks, key=lambda x: x[1], reverse=True)
我不知道如何将timestamp
比较插入上述代码中。此外,还有更好的方法来实现这一目标吗?
P.S:User
中的条目数与Blog
中的条目数相同
答案 0 :(得分:1)
如果你设置
user = models.ForeignKey(User, null=True, related_name='bloguser')
您可以使用
from django.db.models import Count
some_query = User.objects.filter( ... ).annotate( foobar = count('bloguser') )
附加博客数量,然后您可以通过some_query.foobar在模板中访问这些博客。
表示时间戳
some_query = User.objects.filter( ... ).annotate( foobar = count('bloguser') ).annotate( foomax = Max('bloguser__timestamp') )