Como criar / usar uma função de banco de dados personalizada no Django
Prólogo:
Esta é uma pergunta que surge frequentemente no SO:
Equivalente ao PostGIS ST_MakeValid no Django GEOSGeodjango: Como fazer buffer do pontoObter ponto aleatório no django PolygonFieldDjango customizado para Func complexo (função sql)e pode ser aplicado ao acima, bem como no seguinte:
Expressão do Django F em objetos de data e horaQueria compor um exemplo na documentação do SO, mas desde que foi encerrada em 8 de agosto de 2017, seguirei a sugestão deesta meta resposta amplamente votada e discutida e escreva meu exemplo como uma postagem auto-respondida.
Claro, eu ficaria mais do que feliz em ver qualquer abordagem diferente também!
Pergunta, questão:
O Django / GeoDjango tem algumas funções de banco de dados comoLower()
ouMakeValid()
que pode ser usado assim:
Author.objects.create(name='Margaret Smith')
author = Author.objects.annotate(name_lower=Lower('name')).get()
print(author.name_lower)
Existe alguma maneira de usar e / ou criar minha própria função de banco de dados personalizada com base nas funções de banco de dados existentes, como:
Position()
(MySQL)TRIM()
(SQLite)ST_MakePoint()
(PostgreSQL com PostGIS)Como posso aplicar / usar essas funções no Django / GeoDjango ORM?