我有一個基於Django的web應用程序,用戶可以在其中互相聚集和聊天。我剛剛寫完一個功能,用戶可以創建自己的「聊天羣組」,以任何感興趣的主題爲中心。這些可能是私有或公開地可見。極具挑戰性的查詢集過濾,排序和註解(在基於Django的應用程序中)
我的下一個挑戰是呈現出列表中的所有現有的公共組,分頁,並且通過排序的最熱鬧的組第一。經過深思熟慮之後,我決定發生的事情最多的組織是在先前的60分鐘中看到最獨特的訪客(無聲或其他)。可以肯定,唯一的我是指不同的用戶,而不是同一個用戶一次又一次地擊中組。
什麼的最有效的方式以獲得所需的,責令在關聯到這個流行列舉我基於類的視圖的get_queryset()
方法查詢設置的?其次,什麼是效率最高的方式還可以在同一個查詢集中爲每個組對象總共不同的視圖總共不同的視圖,這樣我可以另外顯示總視圖,而根據目前什麼排序熱?
相關型號有:
class Group(models.Model):
topic = models.TextField(validators=[MaxLengthValidator(200)], null=True)
owner = models.ForeignKey(User)
private = models.CharField(max_length=50, default=0)
created_at = models.DateTimeField(auto_now_add=True)
class GroupTraffic(models.Model):
visitor = models.ForeignKey(User)
which_group = models.ForeignKey(Group)
time = models.DateTimeField(auto_now_add=True)
相關的看法是:
class GroupListView(ListView):
model = Group
form_class = GroupListForm
template_name = "group_list.html"
paginate_by = 25
def get_queryset(self):
return Group.objects.filter(private=0,date__gte=???).distinct('grouptraffic__visitor').annotate(recent_views=Count('grouptraffic__???')).order_by('-recent_views').annotate(total_views=Count('grouptraffic__which_group=group'))
正如你所看到的,我掙扎,而浩浩蕩蕩的get_queryset(self)
上述方法,標註兩次,什麼不是。請指教!
@hassanbaig做了我的答案爲你工作..? –
到目前爲止,這麼好,因此接受它。如果將來出現一些問題,將會提出一個新的問題。謝謝! –
所以它缺少的一件事就是,它沒有顯示所有的公共團體,它只顯示了最近60分鐘內趨勢的那些。我實際上需要*所有公共團體*,按照他們過去60分鐘的趨勢排序。 –