django中annotate的一點使用方法

2021-09-17 08:11:25 字數 1140 閱讀 4243

annotate 使用方法:

有時候我們需要連線兩個表做一些查詢,比如部落格中有兩個模型,乙個文章模型,乙個分類模型,分類模型是文章中的分類欄位的外來鍵,如果我們需要查詢每個分類下文章的數量,最簡單的方法就是先將所有分類查到:

categories = newscategory.objects.all()
文章模型名稱為news

然後每個分類django都會自動給你新增乙個屬性category.news_set,這個方法就可以拿到分類對應的文章,然後category.news_set.count()就可以拿到每個分類有多少個文章了。

但是這個方法很低階啊,如果想高階一點,查詢效能更優化,annotate了解一下

現在就可以對上面的查詢方法進行優化了。

categories = newscategory.objects.annotate(num_count=count('news'))

annotate中其實是給categories(queryset)新增了乙個屬性,queryset中的每個物件都會有這麼乙個屬性

現在可以這樣查詢分類下的文章數量:category.num_count()

將**貼出來

原先的**:

def cms_news_category(request):

categories = newscategory.objects.all()

context =

return render(request, 'cms/category.html', context=context)

模板category.html中的**:

}}

使用annotate後的**:

def cms_news_category(request):

categories = newscategory.objects.annotate(num_count=count('news'))

context =

return render(request, 'cms/category.html', context=context)

模板category.html中的**:

}}

Django中annotate的使用和小坑

annotate可以做乙個整合彙總的作用。搜了一下文章這個很多人用來做tags,就直接寫到了tags,但是我用的時候卻顯示不出來,在shell裡試了一下這個的確可以彙總,而且返回的也是整個查詢序列,我就想乾脆直接把彙總的結果返回就好了,就沒有寫到templatetags blog tags.py裡,...

python視覺化 annotate 函式

函式功能 新增圖形內容細節的指向型注釋文字。呼叫簽名 plt.annotate string,xy np.pi 2,1.0 xytext np.pi 2 0.15,1,5 weight bold color b arrowprops dict arrowstyle connectionstyle a...

django中restframework巢狀序列化

問題 定義好了序列化器後有沒有遇到過想要序列化的資料表中有外來鍵的情況,我們需要的這個和外來鍵關聯的資料 model.py 報警表 class police models.model 報警型別 police models.charfield max length 50 開始範圍 begin mode...