【发布时间】: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是点的集合,而不是单个点。 -
对于一个点,你需要一个
PointField:docs.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