Django ORM:注释匹配对象的值
Django ORM: Annotate the Value of matching object
我之前一直在使用 Django 的 ORM annotate
并成功了几次,但我在处理这个特定案例时遇到了麻烦。
我想注释一个新字段,称为tag_to_show
,当字段my_tag
的值匹配某个正则表达式时。
这是我目前拥有的:
queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern,
then=Value("I don't know what to put here")),
output_field=CharField(),
default=Value("Not matched")))
我只是将正则表达式应用于 my_tag
字段。如果正则表达式匹配某个对象的 my_tag
字段中包含的字符串,我想在一个名为 tag_to_show
的新字段中注释它的值。
知道要在 Value
参数中放入什么吗?
我认为答案是:
queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern,
then='my_tag'),
output_field=CharField(),
default=Value("Not matched")))
我想你想要的是 F() expression
:
queryset.annotate(tag_to_show=Case(
When(my_tag__iregex=pattern, then=F('my_tag')),
output_field=CharField(),
default=Value("Not matched")))
我之前一直在使用 Django 的 ORM annotate
并成功了几次,但我在处理这个特定案例时遇到了麻烦。
我想注释一个新字段,称为tag_to_show
,当字段my_tag
的值匹配某个正则表达式时。
这是我目前拥有的:
queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern,
then=Value("I don't know what to put here")),
output_field=CharField(),
default=Value("Not matched")))
我只是将正则表达式应用于 my_tag
字段。如果正则表达式匹配某个对象的 my_tag
字段中包含的字符串,我想在一个名为 tag_to_show
的新字段中注释它的值。
知道要在 Value
参数中放入什么吗?
我认为答案是:
queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern,
then='my_tag'),
output_field=CharField(),
default=Value("Not matched")))
我想你想要的是 F() expression
:
queryset.annotate(tag_to_show=Case(
When(my_tag__iregex=pattern, then=F('my_tag')),
output_field=CharField(),
default=Value("Not matched")))