python – Django ORM – 动态添加何时为Case
作者:互联网
我有一份清单清单
my_list= [
[1,2,3],
[4,5,6],
...
]
我想注释一些像这样的值:
from django.db.models import CharField, Case, When, Value
MyModel.objects.filter(...).annotate(label=Case(When(some_value__in=my_list[0] then=Value('first list')), output_field=CharField()))
现在我需要为my_list中的其他列表添加类似的When,但my_list可以有不同的长度.
我怎么能这样做?
解决方法:
A Case
expression可以包含任意数量的Whens.您可以创建When表达式列表,然后将其解压缩到Case中:
whens = [When(some_value__in=l, then=Value('list #{}'.format(i)))\
for i, l in enumerate(my_list)]
MyModel.objects.filter(...).annotate(label=Case(*whens, output_field=CharField()))
标签:python,django,django-orm,django-queryset 来源: https://codeday.me/bug/20190722/1504092.html