Skip to main content
 首页 » 编程设计

python之GeoDjango。管理员未在创建的实例中显示 point = models.PointField() 的 map 位置

2024年09月07日32开发

我正在尝试以一种非常简单的方式创建成员实例来练习 GeoDjango。我能够创建实例,但它们没有在管理 map 中正确显示(见下图)

下面是我的models.py

from django.contrib.gis.db import models 
 
    class Member(models.Model): 
        name = models.CharField(max_length=150) 
        image = models.ImageField() 
        lat = models.FloatField() 
        lon = models.FloatField() 
        point = models.PointField() 
        objects = models.GeoManager() 
 
        def __str__(self): 
            return self.name 

下面是我的views.py

class MemberCreate(CreateView): 
    model = Member 
    fields = ('name', 'image', 'lat', 'lon') 
 
    def form_valid(self, form, *args, **kwargs): 
        self.object = form.save(commit=False) 
        self.object.point = fromstr('POINT(%s %s)'%(self.object.lat, self.object.lon), srid=4326) 
        self.object.save() 
        return redirect('member:all_members') 

模型和 View 在我的 admin.py 上成功创建了模型实例,下面是 admin.py

的代码
from django.contrib.gis import admin 
from .models import Member 
 
admin.site.register(Member, admin.OSMGeoAdmin) 

关于我的 GeoDjango 项目管理员的要点见下文 该点实际在互联网上的位置(注意相同的纬度,经度见下文)

我该如何解决这个问题

请您参考如下方法:

改变了这个

self.object.point = fromstr('POINT(%s %s)'%(self.object.lat, self.object.lon), srid=4326) 

到

self.object.point = fromstr('POINT(%s %s)'%(self.object.lon, self.object.lat), srid=4326) 

lon 在 lat 之前。