Hoje eu aprendi: como usar a função Replace no ORM do Django.
Vez ou outra rola aquele bug ou mudança na lógica de negócios que faz a gente ter que modificar uma coluna baseada em outra da mesma tabela. Imaginei que o ORM do Django já tinha isso resolvido e tinha mesmo: são as database functions.
No meu caso precisava substituir o valor em uma coluna baseada no valor de outra do mesmo objeto. Foi possível utilizando a função Replace. Veja abaixo:
from app.models import File
from django.db.models.functions import Replace
from django.db.models import Value
base_url = "https://random.s3.eu-central-1.amazonaws.com"
File.objects.update(
s3_url=Replace('s3_file_path', Value("s3://random"), Value(base_url))
)
Isso significa que o valor de s3_url
será o valor de s3_file_path
com a base_url
ao invés do "s3://random"
.
Várias outras funções interessantes que geralmente são resolvidas em código estão disponíveis para serem resolvidas do lado do banco, como reverse e outras. Vale conferir!
Espero que tenha sido útil. Até!
Translations
comments powered by Disqus