Django中GROUP CONCAT的實現

2021-10-04 07:44:20 字數 1014 閱讀 2668

最近專案中前端向django後端請求使用者資訊列表,其中涉及到兩個manytomany的field拼接,想到了用group_concat實現。期初採用了extra的方案,但因為涉及到sql語句的直接編寫,通用性不強,且感覺有點low……因此希望用django 的orm實現。參考了hj009zzh的下面這個帖子:

django中實現group_concat方法,分組聚合

單個manytomany的field查詢中沒有任何問題,但是兩個以上同時查詢時,每乙個field的輸出都會出現重複拼接的現象,因此必須設

distinct=true
但此時會報錯,提示group_concat不能設定distinct,其原因在於定義group_concat時漏掉了一句:

class groupconcat(aggregate):

function = 'group_concat'

template = '%(function)s(%(distinct)s%(expressions)s%(ordering)s%(separator)s)'

allow_distinct = true

def __init__(self, expression, distinct=false, ordering=none, separator=',', **extra):

super(groupconcat, self).__init__(

expression,

distinct='distinct ' if distinct else '',

ordering=' order by %s' % ordering if ordering is not none else '',

separator=' separator "%s"' % separator,

output_field=charfield(),

**extra

)

即「allow_distinct = true」,設定此項後,完美完成了所需功能!

django中restframework巢狀序列化

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

django基礎 django中的app應用

urlpatterns path lw2 views.lw2 先設定子路由和乙個實現登入功能頁面 login.html 使用者名稱 密碼 通過request.post.get 方法可以返回使用者登入時的資訊,根據資訊來判斷和進行下一事件。如果登入資訊與資料庫中資訊不相匹配,則重新返回新的登入頁面。此...

django 重新整理快取 Django 中的快取問題

django 中的快取問題 簡單介紹 在動態 中,使用者所有的請求,伺服器都會去資料庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成使用者看到的頁面.當乙個 的使用者訪問量很大的時候,每一次的的後台操作,都會消耗很多的服務端資源,所以必須使用快取來減輕後端伺服器的壓力.快取是將一些常用...