我有一个有点复杂的查询,我使用带有条件表达式的注释,代码如下:
from django.db.models import Q, F, When, CharField, Value, Case
from django.contrib.auth.models import User
ATT_PREFIX = 'f'
def get_it(mymodel, fields):
q = Q(modelone__modeltwo__mymodel=mymodel)
query_set = {
'aid': F('modelone__id'),
'name': F('modelfour__name'),
}
for f in fields:
query_set[ATT_PREFIX + str(f.id)] = Case(
When(Q(modelfive__modelsix=f) &
Q(modelfive__user__email=F('email')),
then='modelfive__entry'),
default=Value(''),
output_field=CharField(),
)
return User.objects.filter(q).annotate(**query_set)
收集的属性aid 和nameF()
具有预期值。使用条件表达式的第二部分有一个问题:如果 feilds 列表包含 2 个对象,那么我有 2 个用户对象由Case()
满足条件时创建。(aid, name, f17, f18)
因此,我得到了两个对象,而不是一个具有属性的对象:
obj1 attributes (aid, name, f17)
obj2 attributes (aid, name, f18)
Django 1.10、Python3.5