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 hora

Queria 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?

questionAnswers(1)

yourAnswerToTheQuestion