Django Leaflet:为纬度和经度添加表单字段
Django Leaflet: Add form fields for latitude and longitude
我正在使用 django-leaflet
包在 PointField
的 django 管理中显示地图。但是,我想放置字段以便可以写入纬度和经度,作为在地图上选择点的替代方法。
如何将这些字段添加到表单中?
注意:Django Map Widgets 包有插入坐标的功能,但我不想用它,因为它需要一个键。
您可以使用 lat、lng 等 2 个新字段创建模型表单。然后您可以验证是否在地图中选择了点或 lat,lng 字段是否已填充。
class PointEntryOrSelectForm(forms.ModelForm):
lat = forms.FloatField(required=False, label='Latitude')
lng = forms.FloatField(required=False, label='Longtitude')
class Meta:
widgets = {'geom': LeafletWidget()}
model = YourModel
exclude = ['', ]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
geom = self.initial.get("geom", None)
if isinstance(geom, Point):
self.initial["lng"], self.initial["lat"] = geom.tuple
def clean(self):
data = super().clean()
if set(self.changed_data)>={"lat","lng"}:
lat, lng = data.pop("lat", None), data.pop("lng", None)
data["geom"] = Point(lng, lat, srid=4326)
if not (data["geom"] or (data["lat"] and data["lng"])):
raise forms.ValidationError(
{"geom": "No coordinates."})
return data
@admin.register(YourModel)
class YourModelAdmin( LeafletGeoAdmin):
form = PointEntryOrSelectForm
我正在使用 django-leaflet
包在 PointField
的 django 管理中显示地图。但是,我想放置字段以便可以写入纬度和经度,作为在地图上选择点的替代方法。
如何将这些字段添加到表单中?
注意:Django Map Widgets 包有插入坐标的功能,但我不想用它,因为它需要一个键。
您可以使用 lat、lng 等 2 个新字段创建模型表单。然后您可以验证是否在地图中选择了点或 lat,lng 字段是否已填充。
class PointEntryOrSelectForm(forms.ModelForm):
lat = forms.FloatField(required=False, label='Latitude')
lng = forms.FloatField(required=False, label='Longtitude')
class Meta:
widgets = {'geom': LeafletWidget()}
model = YourModel
exclude = ['', ]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
geom = self.initial.get("geom", None)
if isinstance(geom, Point):
self.initial["lng"], self.initial["lat"] = geom.tuple
def clean(self):
data = super().clean()
if set(self.changed_data)>={"lat","lng"}:
lat, lng = data.pop("lat", None), data.pop("lng", None)
data["geom"] = Point(lng, lat, srid=4326)
if not (data["geom"] or (data["lat"] and data["lng"])):
raise forms.ValidationError(
{"geom": "No coordinates."})
return data
@admin.register(YourModel)
class YourModelAdmin( LeafletGeoAdmin):
form = PointEntryOrSelectForm