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])