Prologue:
This is a question arising often in 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)
and can be applied to the above as well as in the following:
I wanted to compose an example on SO Documentation but since it got shut down on August 8, 2017, I will follow the suggestion of this widely upvoted and discussed meta answer and write my example as a self-answered post.
Of course, I would be more than happy to see any different approach as well!!
Question:
Django/GeoDjango has some database functions like Lower()
or MakeValid()
which can be used like this:
Author.objects.create(name='Margaret Smith')
author = Author.objects.annotate(name_lower=Lower('name')).get()
print(author.name_lower)
Is there any way to use and/or create my own custom database function based on existing database functions like:
Position()
(MySQL)TRIM()
(SQLite)ST_MakePoint()
(PostgreSQL with PostGIS)
How can I apply/use those functions in Django/GeoDjango ORM?