Доступ к значению строки с помощью условий кверисета Django Case/When
Я пытаюсь перенести некоторое значение в Django, я использую When-Case модели Django. Моя реализация проста, она работала со статической строкой:
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' в db.
You reference a field with an F expression [Django-doc], or here you concatenate the string with Concat [Django-doc]:
from django.db.models.functions import Concat
pre_desc = ['a', 'b', 'c']
post_desc = ['a', 'b', 'c']
StoreO.objects.all().update(
description=Case(
When(
description__in=pre_desc,
then=Concat(Value('pre-string'), 'description'),
),
When(
description__in=post_desc,
then=Concat('description', Value('some-post-string')),
),
default=Value('def_str')),
)
)