【问题标题】:can not create PointField() in GeoDjango无法在 GeoDjango 中创建 PointField()
【发布时间】:2020-06-16 16:05:30
【问题描述】:

我无法从这个示例 models.py 创建我的数据库。

    from django.contrib.gis.db import models


class Subscriber(models.Model):
    id = models.IntegerField(primary_key=True)
    login  = models.CharField(max_length=200, unique=True)
    email  = models.CharField(max_length=200, unique=True)
    country  = models.CharField(max_length=200)

    def __str__(self):
        return self.email

class Localisation(models.Model):
    name = models.CharField(max_length=100)
    point = models.PointField()
    address = models.CharField(max_length=100)
    city = models.CharField(max_length=50)


class Video(models.Model):
    id = models.IntegerField(primary_key=True)
    video_title = models.CharField(max_length=200)
    video_url = models.CharField(max_length=255, unique=True)
    video_file = models.CharField(max_length=50)
    video_date = models.DateTimeField('date published')
    video_user = models.ForeignKey(Subscriber, on_delete=models.CASCADE)
    loc = models.ForeignKey(Localisation, on_delete=models.CASCADE)

    def __str__(self):
        return self.video_title + " / " + self.video_file

无论我尝试什么,我都会遇到这个错误(尝试 Stackoverflow 和 Google 都徒劳):

File "/usr/lib/python3.8/site-packages/django/contrib/gis/db/models/fields.py", line 188, in get_prep_value
    raise ValueError("Couldn't create spatial object from lookup value '%s'." % obj)
ValueError: Couldn't create spatial object from lookup value 'POINT(12.4604, 43.9420)'.

我不知道值 POINT((12.4604, 43.9420) 在哪里。我从来没有输入过。我想我需要添加一个默认值,我也尝试过,通过修改 point = models.PointField()在:

point = models.PointField(default='POINT(0 0)

但错误仍然存​​在...

【问题讨论】:

  • A PolygonField 是点的集合,而不是单个点。
  • 对于一个点,你需要一个PointFielddocs.djangoproject.com/en/3.0/ref/contrib/gis/model-api/…
  • 谢谢。是的,这就是我所做的,我错误地复制了我的代码(现在更正),但仍然出现错误。
  • 我已添加:从 django.contrib.gis.geos 导入 GEOSGeometry 并设置点 = models.PointField(default=GEOSGeometry('POINT(5 23)')) 但出现错误:给出的参数无效用于点初始化,这似乎证明了设置默认值的问题,但现在可以获得更多信息。

标签: python mysql django geodjango


【解决方案1】:

解决方案可能很简单,但我必须阅读 API 中的代码本身才能获取此信息(找不到 google 链接)。

您必须设置一个默认值来保存 PointField()。就我而言,因为我没有要输入的默认值,所以我应该设置这个:default= None

代码如下:

from django.contrib.gis.db import models

class Location(models.Model):
    gps = models.PointField(default=None)

【讨论】:

    猜你喜欢
    • 2018-01-27
    • 1970-01-01
    • 2012-10-01
    • 2016-04-29
    • 2017-01-07
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多