Django ORM - 动态添加何时为Case

Goc*_*cht 3 python django django-orm django-queryset

我有一份清单清单

my_list= [
    [1,2,3],
    [4,5,6],
    ...
]
Run Code Online (Sandbox Code Playgroud)

我想注释一些像这样的值:

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()))
Run Code Online (Sandbox Code Playgroud)

现在我需要When为其他列表添加类似的内容my_list,但my_list可能有不同的长度.

我怎么能这样做?

Iva*_*van 10

Case表达可以包含任意数量的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()))
Run Code Online (Sandbox Code Playgroud)