poly__within 上的 Django FieldError
Django FieldError on poly__within
我无法进一步找到 Django 在我调用 poly__within
以在 PostGIS 中查询 GeoDjango 的那一行出现错误的原因。
我的模型没有 poly
但下面的错误表明它是 FieldError。我不知道它在哪里或为什么要寻找 poly
的字段
Traceback (most recent call last):
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/gridlockdev/Desktop/heroku/grace/network/views.py", line 71, in view_routes
routes = Route.objects.filter(poly__within= geom[0])
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/query.py", line 784, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/query.py", line 802, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1250, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1276, in _add_q
allow_joins=allow_joins, split_subq=split_subq,
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1154, in build_filter
lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1034, in solve_lookup_type
_, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1352, in names_to_path
"Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword 'poly' into field. Choices are: agency, agency_id, created_at, distance, duration, ogc_fid, route_color, route_desc, route_id, route_long, route_name, route_tcolor, route_type, route_url, shape_id, updated_at, wkb_geometry
这是我的 views.py
中的样子
json_feature = json.loads(request.POST['geo_obj'])
geom = make_geometry_from_feature(json_feature)
routes = Route.objects.filter(poly__within= geom[0])
Django 过滤器语法是关键字参数的第一部分,在 __
之前是字段名称。 Route.objects.filter(poly__within=geom[0])
过滤 poly
字段在给定几何范围内的 Route 对象。
您还没有分享您的 Route
模型,但我认为它上面有一个几何字段。如果是这样,您应该将此处的 poly
替换为几何字段的名称。例如如果你的模型看起来像这样
from django.contrib.gis.db import models
class Route(models.Model):
shape = models.MultiPolygonField()
那么你的过滤器应该是 Route.objects.filter(shape__within=geom[0])
。
我无法进一步找到 Django 在我调用 poly__within
以在 PostGIS 中查询 GeoDjango 的那一行出现错误的原因。
我的模型没有 poly
但下面的错误表明它是 FieldError。我不知道它在哪里或为什么要寻找 poly
Traceback (most recent call last):
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/gridlockdev/Desktop/heroku/grace/network/views.py", line 71, in view_routes
routes = Route.objects.filter(poly__within= geom[0])
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/query.py", line 784, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/query.py", line 802, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1250, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1276, in _add_q
allow_joins=allow_joins, split_subq=split_subq,
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1154, in build_filter
lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1034, in solve_lookup_type
_, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "/home/gridlockdev/Desktop/heroku/grace/env/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1352, in names_to_path
"Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword 'poly' into field. Choices are: agency, agency_id, created_at, distance, duration, ogc_fid, route_color, route_desc, route_id, route_long, route_name, route_tcolor, route_type, route_url, shape_id, updated_at, wkb_geometry
这是我的 views.py
中的样子json_feature = json.loads(request.POST['geo_obj'])
geom = make_geometry_from_feature(json_feature)
routes = Route.objects.filter(poly__within= geom[0])
Django 过滤器语法是关键字参数的第一部分,在 __
之前是字段名称。 Route.objects.filter(poly__within=geom[0])
过滤 poly
字段在给定几何范围内的 Route 对象。
您还没有分享您的 Route
模型,但我认为它上面有一个几何字段。如果是这样,您应该将此处的 poly
替换为几何字段的名称。例如如果你的模型看起来像这样
from django.contrib.gis.db import models
class Route(models.Model):
shape = models.MultiPolygonField()
那么你的过滤器应该是 Route.objects.filter(shape__within=geom[0])
。