#28896: GeoDjango PointField fails to generate query if filtering on a NULL
value
-------------------------------------+-------------------------------------
Reporter: William | Owner: nobody
Li |
Type: Bug | Status: new
Component: Database | Version: 2.0
layer (models, ORM) | Keywords: QuerySet.extra
Severity: Normal | PointField GeoDjango
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
Environment:
* Python 3.6.3
* postgres 9.6.6
* Django 2.0
Note: This was working under Django 1.11.7.
{{{
# models.py
from django.contrib.gis.db import models
class Restaurant(models.Model):
location = models.PointField(blank=True, null=True, db_index=True)
}}}
{{{
# tests.py
from django.test import TestCase
from restaurants.models import Restaurant
class RestaurantTestCase(TestCase):
def test_no_location(self):
# Failing query
Restaurant.objects.filter(location=None)
}}}
{{{
$ python manage.py testCreating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_no_location (restaurants.tests.RestaurantTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/wli/projects/point-field-bug/restaurants/tests.py", line 7,
in test_no_location
Restaurant.objects.filter(location=None)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/query.py", line 836, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/query.py", line 854, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/sql/query.py", line 1252, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/sql/query.py", line 1276, in _add_q
split_subq=split_subq,
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/sql/query.py", line 1214, in build_filter
condition = self.build_lookup(lookups, col, value)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/sql/query.py", line 1084, in build_lookup
lookup = lookup_class(lhs, rhs)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/contrib/gis/db/models/lookups.py", line 23, in __init__
super().__init__(lhs, rhs)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/lookups.py", line 18, in __init__
self.rhs = self.get_prep_lookup()
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/db/models/lookups.py", line 68, in get_prep_lookup
return self.lhs.output_field.get_prep_value(self.rhs)
File "/home/wli/.envs/point-field-bug/lib/python3.6/site-
packages/django/contrib/gis/db/models/fields.py", line 188, in
get_prep_value
raise ValueError('Cannot use object with type %s for a spatial lookup
parameter.' % type(obj).__name__)
ValueError: Cannot use object with type NoneType for a spatial lookup
parameter.
----------------------------------------------------------------------
Ran 1 test in 0.005s
FAILED (errors=1)
Destroying test database for alias 'default'...
}}}
Workaround:
{{{
Restaurant.objects.extra(where=['location IS NULL'])
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/28896>
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/046.04078b331cacd86eb5fe0ffd3d0f74c0%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.