如何解决如何在Django管理面板中将PointField显示为经度和纬度
尽管我读了很多关于如何在admin Django面板中将PointField显示为纬度和经度的类似文章,但我不知道该怎么做。
管理面板会继续显示地图,但不会显示所需的两个字段。
这是我使用LatLongWidget
小部件进行的尝试,未成功。
我的模特:
class Station(models.Model):
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
owner = models.ForeignKey(User,related_name="stations",on_delete=models.CASCADE)
name =models.CharField(max_length=100)
location = models.PointField()
我的管理员
from django.contrib import admin
from django.contrib.gis.admin import OSMGeoAdmin
from .models import Station
from django.contrib.gis.db import models as geomodels
from .widgets import LatLongWidget
@admin.register(Station)
class StationAdmin(OSMGeoAdmin):
list_display = ('name','owner','location')
search_fields = ('name','owner__email')
formfield_overrides = {
geomodels.PointField: {'widget': LatLongWidget},}
我的widget.py
from django import forms
from django.contrib.gis.db import models as geomodels
class LatLongWidget(forms.MultiWidget):
"""
A Widget that splits Point input into latitude/longitude text inputs.
"""
def __init__(self,attrs=None,date_format=None,time_format=None):
widgets = (forms.TextInput(attrs=attrs),forms.TextInput(attrs=attrs))
super(LatLongWidget,self).__init__(widgets,attrs)
def decompress(self,value):
if value:
return tuple(value.coords)
return (None,None)
def value_from_datadict(self,data,files,name):
mylat = data[name + '_0']
mylong = data[name + '_1']
try:
point = Point(float(mylat),float(mylong))
except ValueError:
return ''
return point
我该如何摆脱地图,改为使用经度和纬度?
解决方法
解决方案比我预期的简单。
有两项更改。
-
在admin.py中将
class StationAdmin(OSMGeoAdmin)
更改为class StationAdmin(admin.ModelAdmin)
-
将
from django.contrib.gis.geos import Point
导入widgets.py
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。