GeoDjango:无法使用 PointField() 保存模型,错误:SpatialProxy (POINT) 的值类型为:<class 'users.models.Point'>

Rom*_*oma 1 django geodjango

这个想法是集成谷歌地图而不是 GeoDjango v1.11.5 的默认地图PointField()

目前,在我的models.py 中

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.PROTECT, related_name='Teacher')
    placename = models.CharField(blank=True,max_length=255)
    latitude = models.FloatField(blank=True, null=True, verbose_name='Latitude')
    longitude = models.FloatField(blank=True, null=True, verbose_name='Longitude')
    location = models.PointField(blank = True, null=True, srid=4326)
    objects = models.GeoManager()

    def save(self, *args, **kwargs):
        self.location = Point(self.longitude, self.latitude)
        super(Teacher, self).save(*args, **kwargs)  # Call the "real" save() method.
Run Code Online (Sandbox Code Playgroud)

但是,当我在手动添加 long 和 lat 后单击保存时,我得到:

TypeError at /admin/users/location/add/ 无法使用以下类型的值设置 Location SpatialProxy (POINT):

roo*_*oob 5

我相信你使用了错误的Point类。如果您使用它,则Point应该从django.contrib.gis.geosnot导入users.models.PointPointField

您的导入应如下所示:

from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
Run Code Online (Sandbox Code Playgroud)