Cómo hacer / usar una función de base de datos personalizada en Django

Prólogo:

Esta es una pregunta que surge a menudo en SO:

Equivalente de PostGIS ST_MakeValid en Django GEOSGeodjango: Cómo almacenar desde el puntoObtenga puntos aleatorios de django PolygonFieldDjango personalizado para Func complejo (función sql)

y se puede aplicar a lo anterior así como a lo siguiente:

Expresión Django F en objetos datetime

Quería componer un ejemplo sobre la documentación de SO, pero como se cerró el 8 de agosto de 2017, seguiré la sugerencia deesta meta respuesta ampliamente votada y discutida y escribo mi ejemplo como una publicación con respuesta propia.

¡Por supuesto, estaría más que feliz de ver cualquier enfoque diferente también!

Pregunta:

Django / GeoDjango tiene algunas funciones de base de datos comoLower() oMakeValid() que se puede usar así:

Author.objects.create(name='Margaret Smith')
author = Author.objects.annotate(name_lower=Lower('name')).get()
print(author.name_lower)

¿Hay alguna manera de usar y / o crear mi propia función de base de datos personalizada basada en funciones de base de datos existentes como:

Position() (MySQL)TRIM() (SQLite)ST_MakePoint() (PostgreSQL con PostGIS)

¿Cómo puedo aplicar / usar esas funciones en Django / GeoDjango ORM?

Respuestas a la pregunta(1)

Su respuesta a la pregunta