使用 Django 的 Case/When 查询集条件访问行的值
Access value of row using Django's Case/When queryset conditions
我正在尝试迁移 Django 中的一些值,我正在使用 Django 模型的 When-Case
。我的实现很简单,它适用于静态字符串:
When(
description__in=pre_desc,
then=Value("pre-string"),
),
When(
description__in=post_desc,
then=Value("some-post-string"),
)
上面的代码有效。但是当我尝试在现有字符串之前或之后添加一些内容时,问题就出现了:
pre_desc = ["a", "b", "c"]
post_desc = ["a", "b", "c"]
StoreO.objects.filter().update(
description=Case(
When(
description__in=pre_desc,
then=Value("pre-string"+description),
),
When(
description__in=post_desc,
then=Value(description+"some-post-string"),
),
default=Value("def_str")),
)
)
它说,description
未定义。谁能给我一些解决方法?
我也尝试了 str(F('description')+'randomstr')
,结果在数据库中得到了 F('description')+'randomstr'
。
您使用 F
expression [Django-doc], or here you concatenate the string with Concat
[Django-doc]:
引用了一个字段
from django.db.models.functions import <b>Concat</b>
pre_desc = ['a', 'b', 'c']
post_desc = ['a', 'b', 'c']
StoreO.objects.all().update(
description=Case(
When(
description__in=pre_desc,
then=<strong>Concat(</strong>Value('pre-string'), 'description'<strong>)</strong>,
),
When(
description__in=post_desc,
then=<strong>Concat(</strong>'description', Value('some-post-string')<strong>)</strong>,
),
default=Value('def_str')),
)
)
我正在尝试迁移 Django 中的一些值,我正在使用 Django 模型的 When-Case
。我的实现很简单,它适用于静态字符串:
When(
description__in=pre_desc,
then=Value("pre-string"),
),
When(
description__in=post_desc,
then=Value("some-post-string"),
)
上面的代码有效。但是当我尝试在现有字符串之前或之后添加一些内容时,问题就出现了:
pre_desc = ["a", "b", "c"]
post_desc = ["a", "b", "c"]
StoreO.objects.filter().update(
description=Case(
When(
description__in=pre_desc,
then=Value("pre-string"+description),
),
When(
description__in=post_desc,
then=Value(description+"some-post-string"),
),
default=Value("def_str")),
)
)
它说,description
未定义。谁能给我一些解决方法?
我也尝试了 str(F('description')+'randomstr')
,结果在数据库中得到了 F('description')+'randomstr'
。
您使用 F
expression [Django-doc], or here you concatenate the string with Concat
[Django-doc]:
from django.db.models.functions import <b>Concat</b>
pre_desc = ['a', 'b', 'c']
post_desc = ['a', 'b', 'c']
StoreO.objects.all().update(
description=Case(
When(
description__in=pre_desc,
then=<strong>Concat(</strong>Value('pre-string'), 'description'<strong>)</strong>,
),
When(
description__in=post_desc,
then=<strong>Concat(</strong>'description', Value('some-post-string')<strong>)</strong>,
),
default=Value('def_str')),
)
)