django - 无法使用以下类型的值设置 MODEL_NAME SpatialProxy (POLYGON):
问题描述
当我尝试对我的一个模型的 url 进行 API 调用时,我面临以下问题:
Cannot set Allotment SpatialProxy (POLYGON) with value of type: <class 'django.contrib.gis.geos.polygon.Polygon'>
我在 PGadmin 中检查了我的模型的定义和数据类型。
完整日志
Traceback:
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/viewsets.py" in view
103. return self.dispatch(request, *args, **kwargs)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/views.py" in dispatch
483. response = self.handle_exception(exc)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/views.py" in handle_exception
443. self.raise_uncaught_exception(exc)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/views.py" in dispatch
480. response = handler(request, *args, **kwargs)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/mixins.py" in list
42. page = self.paginate_queryset(queryset)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/generics.py" in paginate_queryset
173. return self.paginator.paginate_queryset(queryset, self.request, view=self)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/rest_framework/pagination.py" in paginate_queryset
337. return list(queryset[self.offset:self.offset + self.limit])
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/models/query.py" in __iter__
272. self._fetch_all()
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/models/query.py" in _fetch_all
1179. self._result_cache = list(self._iterable_class(self))
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/models/query.py" in __iter__
63. obj = model_cls.from_db(db, init_list, row[model_fields_start:model_fields_end])
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/models/base.py" in from_db
507. new = cls(*values)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/models/base.py" in __init__
424. _setattr(self, field.attname, val)
File "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/contrib/gis/db/models/proxy.py" in __set__
75. instance.__class__.__name__, gtype, type(value)))
Exception Type: TypeError at /api/cutarea-allotment/
Exception Value: Cannot set Allotment SpatialProxy (POLYGON) with value of type: <class 'django.contrib.gis.geos.polygon.Polygon'>
这是模型的定义:
from renter.models import *
from classification_list.models import*
from django.contrib.gis.db import models
from django.contrib.gis.geos import Polygon
...
class All(models.Model):
geom = models.PolygonField(geography=True, null=True, blank=True, verbose_name='geom')
num_kvr = models.ForeignKey(QartalKeys, models.DO_NOTHING, blank=True, null=True)
allot_num = models.SmallIntegerField(blank=True, null=True)
怎么了?对于这个问题,我没有找到相关的问题或有用的建议。谢谢。
解决方案
问题一定与 的geography=True
论点有关PolygonField
。
阅读有关geography
启用字段的文档,我们会看到以下内容:
geography 类型为用地理坐标(例如,WGS84 经度/纬度)表示的空间特征提供本地支持。与几何类型使用的平面不同,地理类型使用其数据的球形表示。在地理列上执行的距离和测量操作会自动采用大圆弧计算并返回线性单位。换句话说,当在两个地理上调用 ST_Distance 时,将返回一个以米为单位的值(与在 WGS84 中的几何列上调用度数相反)。
由于您将字段设置为期望geography
类型对象,然后您尝试传递多边形的非地理表示,因此您会收到错误消息。
推荐阅读
- python - 烧瓶 werkzeug\formparser.py 异常
- javascript - 箭头函数混淆
- git - 如何查看一个分支的更改是否已经在另一个分支中完成?
- dafny - Dafny 程序不能证明这种二分搜索实现吗?
- django - 实际上,我将 django 数据库 sqlite3 连接到 Mysql 数据库,每当我迁移时,我都会收到此错误
- spring - Spring批处理的默认行为是仅在第一项完成后才处理下一项吗?
- java - eclipse Luna创建EJB 2.1项目时如何为Websphere 8.5编写jndi.properties
- r - r 删除具有空索引的列
- doctrine-orm - Vich 上传程序包:映射不存在
- apache-flink - 尽管使用 Apache Flink 进行分区,但元组的分布不平衡