2017-09-24 70 views
0

我有以下2種型號:Django的模型查詢

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比較到上述代碼插入。另外,有沒有更好的方法來實現這一目標?

PS:如果你設置

user = models.ForeignKey(User, null=True, related_name='bloguser') 

您可以使用

from django.db.models import Count 
some_query = User.objects.filter(...).annotate(foobar = count('bloguser')) 

附加博客的數目的條目User號是相同Blog

回答

1

條目數,然後您可以通過some_query.foobar訪問您的模板。

的時間戳

some_query = User.objects.filter(...).annotate(foobar = count('bloguser')).annotate(foomax = Max('bloguser__timestamp')) 
+0

如何應對'timestamp'一部分? –

+0

https://stackoverflow.com/questions/844591/how-to-do-select-max-in-django – DisneylandSC

+0

您還可以在用戶模型中記錄最新的博客文章。那麼你可以簡單地.orderby() – DisneylandSC