GeoDjango:无法使用 PointField() 保存模型,错误:空间代理 (POINT),值类型:<类 'users.models.Point'>



这个想法是集成Google Maps,而不是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.

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

typeError at/admin/user/user/location/add/无法设置位置 带有类型的值:

的point(点)

我相信您正在使用错误的Point类。如果您使用PointField

,则应从django.contrib.gis.geos导入Point,而不是users.models.Point

您的导入应如下:

from django.contrib.gis.db import models
from django.contrib.gis.geos import Point

来自给定代码的导入模型

    from django.db import models
    from django.contrib.gis.db import models

然后写下您的代码

    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.