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 datetimeQuerí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?