#27529: Geographic database functions with two parameters should accept
expressions
in one or the other arguments
-------------------------------------+-------------------------------------
Reporter: Antoine | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 1.10
Severity: Normal | Keywords: gis geographic
Triage Stage: | queryset
Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
== Context
With the release of Django 1.9 database functions were introduced to
simplify measurements, operations, lookups, etc. within the queryset.
Some of the functions introduced take two arguments : `Difference`,
`Distance`, `Intersection`, `SymDifference` and `Union`.
The doc [#point1 (1)] states these functions "Accepts two geographic
fields or expressions and returns the distance between them".
== Problem
As they all inherit from `GeoFuncWithGeoParam` [#point2 (2)], they
actually expect `expr1` to be an expression (column or value), and `expr2`
to be a `GEOSGeometry` object, despite stated otherwise.
If an expression is passed as `expr2`, this error is raised :
{{{
In [0]: MyClass.objects.annotate(distance=Distance('field1', 'field2'))
[...]
ValueError: Please provide a geometry attribute with a defined SRID.
}}}
== Solutions
1. Edit the doc to mention these limitations
2. (much better) Fix the code to accept expressions in `expr2` as
documented (and `GEOSGeometry` objects as expr1). Most of the backends
support geographic measurements and operations between two fields, so
there is not much to change.
Happy to work on a patch if the bug is validated.
[=#point1 (1)]
https://docs.djangoproject.com/en/dev/ref/contrib/gis/functions/#distance
[=#point2 (2)]
https://github.com/django/django/blob/1.9/django/contrib/gis/db/models/functions.py#L91
--
Ticket URL: <https://code.djangoproject.com/ticket/27529>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/051.4e18a0cd7a4551df029c17c2a2c864c7%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.