Django ORM - 动态添加 When to Case
Django ORM - Dynamically add When to 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 可以有不同的长度。
我该怎么做?
一个Case
expression可以包含任意数量的When
。您可以创建一个 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()))
我有一个列表列表
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 可以有不同的长度。
我该怎么做?
一个Case
expression可以包含任意数量的When
。您可以创建一个 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()))