Python Django模型查询
我有以下两种型号:Python Django模型查询,python,django,model,django-rest-framework,Python,Django,Model,Django Rest Framework,我有以下两种型号: 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) ti
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), ...]
这个列表应该是按降序排列的。基本上,我想获得关于一个用户写了多少篇博客文章的信息
在这种情况下,两个用户有相同数量的博客文章,我希望他们被排序的基础上,最新的时间戳的博客文章创建他们
到目前为止,我已经尝试了以下方法,但仍然没有成功
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)
我不知道如何将时间戳比较插入到上述代码中。还有,有没有更好的方法来实现这一点
注意:如果您设置,则用户中的条目数与博客中的条目数相同
user = models.ForeignKey(User, null=True, related_name='bloguser')
你可以用
from django.db.models import Count
some_query = User.objects.filter( ... ).annotate( foobar = count('bloguser') )
附加博客的数量,然后可以通过某个_query.foobar在模板中访问这些博客
时间戳
some_query = User.objects.filter( ... ).annotate( foobar = count('bloguser') ).annotate( foomax = Max('bloguser__timestamp') )
如何处理时间戳部分?您还可以在用户模型中记录最新的博客文章。那么你可以简单地说。orderby你能在上面的答案中包括你的完整解决方案吗?谢谢