我也想通过 Django REST API 通过模板选择位置..请建议必要的 django 包以及如何在 Django 模型中编写 locationField
MultiValueField
:
class Location:
def __init__(self, latitude, longitude):
self.latitude = latitude
self.longitude = longitude
class LocationField(MultiValueField):
def __init__(self, *args, **kwargs):
fields = (
FloatField(max_value=90, min_value=-90),
FloatField((max_value=90, min_value=-90)
)
super().__init__(*args, **kwargs)
def compress(self, data_list):
latitude, longitude = data_list
return Location(latitude, longitude)
关于第二个问题,抱歉,目前还不清楚你要问什么。
我会尽量准确,我已经建立了一个类似的项目。 正如您在链接中的图片中所描述的那样。 以下内容可以完成这项工作。 在 settings.py 中进行这些更改
'django.contrib.gis.db.backends.postgis',
安装此包https://pypi.org/project/django-map-widgets/ 在已安装的应用程序中添加以下行:
'django.contrib.gis',
'mapwidgets'
添加这些变量:
GOOGLE_MAP_API_KEY = "Create a google_map_api_key_and_past_it_here"
MAP_WIDGETS = {
"GOOGLE_MAP_API_KEY": "Create a google_map_api_key_and_past_it_here"
}
在 models.py 中:
from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
class Stack(models.Model):
location = models.PointField(geography=True, spatial_index=True)
在 forms.py 中:
from django.contrib.gis import forms as gis_forms
from django.contrib.gis.db import models as gis_models
from mapwidgets.widgets import GooglePointFieldWidget
class GoogleAddressForm(gis_forms.ModelForm):
location = gis_forms.PointField(
widget=widgets.GooglePointFieldWidget(
),
)
class Meta:
model = Point
fields = "__all__"
formfield_overrides = {
gis_models.PointField: {"widget": widgets.GooglePointFieldWidget()}
}
在视图中只需渲染模板并在上下文中传递表单。 在模板中使用
{{form.location}}
将渲染具有所有这些功能的精确图像。