Prologue:Comment faire/utiliser une fonction de base de données personnalisée dans Django
Ceci est une question qui se pose souvent SO:
- Equivalent of PostGIS ST_MakeValid in Django GEOS
- Geodjango: How to Buffer From Point
- Get random point from django PolygonField
- Django custom for complex Func (sql function)
et peut être appliqué à ce qui précède, ainsi que dans les domaines suivants:
Je voulais composer un exemple sur le SO Documentation, mais étant donné qu'il se est arrêté le 8 Août, 2017, je vais suivre la suggestion de this widely upvoted and discussed meta answer et écris mon exemple en tant que message auto-répondu.
Bien sûr, je serais plus qu'heureux de voir une approche différente aussi !!
Question:
Django/GeoDjango a quelques fonctions de base de données comme Lower()
ou MakeValid()
qui peut être utilisé comme ceci:
Author.objects.create(name='Margaret Smith')
author = Author.objects.annotate(name_lower=Lower('name')).get()
print(author.name_lower)
Est-il possible d'utiliser et/ou créer ma propre fonction de base de données personnalisée basée sur des fonctions de base de données existantes comme:
Position()
(MySQL)TRIM()
(SQLite)ST_MakePoint()
(PostgreSQL avec PostGIS)
Comment puis-je appliquer/utiliser ces fonctions dans Django/GeoDjango ORM?