Django v1.11.5
我正在尝试安装GeoDjango来玩GoogleMaps.
我为MAC安装了PostgreSQL应用程序并安装了pip install psycopg2.我还用home-brew来安装GDAL.
编辑settings.py添加:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'djangodb',
'USER': 'admin',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行python manage.py迁移时,我得到:AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
我创建了用户:CREATE DATABASE djangodb OWNER admin;
完全错误:
正在运行迁移:应用users.0011_location ... Traceback(最近一次调用最后一次):文件"manage.py",第22行,在execute_from_command_line(sys.argv)文件"/ Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/core/management/init .py",第364行,在execute_from_command_line utility.execute()文件"/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site- packages/django/core/management/init .py",第356行,执行self.fetch_command(子命令).run_from_argv(self.argv)文件"/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/ site-packages/django/core/management/base.py",第283行,在run_from_argv中自执行(*args,**cmd_options)文件"/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/ site-packages/django/core/management/base.py",第330行,执行输出= self.handle(*args,**options)文件"/ Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3. 6/site-packages/django/core/management/commands/migrate.py",第2行 04,处理fake_initial = fake_initial,文件"/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/executor.py",第115行,处于migrate state = self ._migrate_all_forwards(state,plan,full_plan,fake = fake,fake_initial = fake_initial)文件"/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/executor.py" ,第145行,在_migrate_all_forwards state = self.apply_migration(state,migration,fake = fake,fake_initial …
这个想法是集成谷歌地图而不是 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):