Replace Django ORM Function


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