我正在嘗試根據用戶輸入值生成動態查詢。正常的查詢是這樣的:
result = (
my_model
.objects
.aggregate(
Type1=Count(
'pk',
filter=Q(db_field=1)),
Type2=Count(
'pk',
filter=Q(db_field=2)),
Type3=Count(
'pk',
filter=Q(db_field=3)),
Type4=Count(
'pk',
filter=Q(db_field=4)),
Type5=Count(
'pk',
filter=Q(db_field=5)))
這是我為測驗撰寫的代碼:
from django.db.models import (Count, Q)
field = field_values # (it's tuple and read from input)
aggregate_query = ''
if field != None:
for j in field:
aggregate_query = f"{j[1]}={Count}('pk', filter={Q}(db_field={j[0]})),"
my_model.objects.aggregate(aggregate_query[:-1])
當我在 python 控制臺上評估時,聚合查詢正確生成并得到結果,但是當我執行此代碼時,它拋出以下錯誤:
QuerySet.aggregate() received non-expression(s):
Type1=<class 'django.db.models.aggregates.Count'>('pk', filter=<class 'django.db.models.query_utils.Q'>(db_field=1)),
Type2=<class 'django.db.models.aggregates.Count'>('pk', filter=<class 'django.db.models.query_utils.Q'>(db_field=2)),
Type3=<class 'django.db.models.aggregates.Count'>('pk', filter=<class 'django.db.models.query_utils.Q'>(db_field=3)),
Type4=<class 'django.db.models.aggregates.Count'>('pk', filter=<class 'django.db.models.query_utils.Q'>(db_field=4)),
Type5=<class 'django.db.models.aggregates.Count'>('pk', filter=<class 'django.db.models.query_utils.Q'>(db_field=5)).
有人可以幫我嗎?
uj5u.com熱心網友回復:
問題是這f"{j[1]}={Count}('pk', filter={Q}(db_field={j[0]})),"是一個字串,你不能用字串查詢。
您可以構造一個帶有理解的 dict,然后將其用于查詢:
from django.db.models import (Count, Q)
field = field_values
aggregate_query = {j[1]: Count('pk', filter=Q(db_field=j[0])) for j in field} if j != None else {}
my_model.objects.aggregate(**aggregate_query)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448470.html
標籤:django PostgreSQL django模型 django-rest-framework 石墨烯-django
