2012-07-13 78 views
1

我正在使用PostgreSQL 9.1,Django 1.3.1,psycopg2 2.4.5和使用庫建立數據庫geos 3.3.0,PostGIS 1.5.4和ProJ 4.7 0.0。將OFTInteger轉換爲十進制時出現Django錯誤

我有一個命令,通過一些優化將形狀文件加載到數據庫中,使形狀更簡單。

爲了使模型簡單,我只是直接把有問題的領域:

class Circonscription(models.Model): 
    shape = models.GeometryField() 
    simple_shape = models.GeometryField() 
    centroid = models.PointField(null=True) 

當我想從形狀文件中創建一個,我這樣做:

Circonscription.objects.create(
      id_cep=feature['id_cep'], 
      co_cep=feature['co_cep'], 
      nm_cep=feature['nm_cep'], 
      nmtri_cep=feature['nmtri_cep'], 
      dh_maj=feature['dh_maj'], 
      shape=geometry.wkt, 
      simple_shape=simple_geometry.wkt, 
      centroid=geometry.geos.centroid) 

現在,當我運行我的命令,它失敗,並出現此錯誤:

File "/home/pg/Projets/python/myproject/circonscriptions/management/commands/loadshapefiles.py", line 174, in add_boundaries_for_layer 
centroid=geometry.geos.centroid) 
File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/manager.py", line 138, in create 
    return self.get_query_set().create(**kwargs) 
    File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/query.py", line 360, in create 
    obj.save(force_insert=True, using=self.db) 
    File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/base.py", line 460, in save 
    self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
    File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/base.py", line 543, in save_base 
    for f in meta.local_fields if not isinstance(f, AutoField)] 
    File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/fields/subclassing.py", line 28, in inner 
    return func(*args, **kwargs) 
    File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 786, in get_db_prep_save 
    return connection.ops.value_to_db_decimal(self.to_python(value), 
    File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 761, in to_python 
    return decimal.Decimal(value) 
    File "/usr/lib/python2.7/decimal.py", line 658, in __new__ 
    raise TypeError("Cannot convert %r to Decimal" % value) 
TypeError: Cannot convert <django.contrib.gis.gdal.field.OFTInteger object at 0x2458b50> to Decimal 

有沒有人有關於它的線索?

回答

1

它在某種程度上已經與值的編碼做的,然後另一個誤差約爲this problem終於解決了它。 確保在將值傳遞給模型進行保存之前,將這些值轉換爲正確的編碼(utf-8)。

0

十進制需要一個字符串,但你餵養它的OTFInteger,你需要它的地方轉換爲字符串的過程中

+0

如果我打印它,它是一個點(lat,lng),該字段也是這種類型.. – Assertnotnull 2012-07-16 18:29:34

相關問題