我想在 django 模型中添加一个位置字段,通过输入纬度和经度来获取位置输入

问题描述 投票:0回答:2

我也想通过 Django REST API 通过模板选择位置..请建议必要的 django 包以及如何在 Django 模型中编写 locationField

这是我要添加的 django 位置字段的图片,请查看它

django python-3.x django-models django-rest-framework
2个回答
4
投票

您可以创建多个输入字段子类化

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)

关于第二个问题,抱歉,目前还不清楚你要问什么。


1
投票

我会尽量准确,我已经建立了一个类似的项目。 正如您在链接中的图片中所描述的那样。 以下内容可以完成这项工作。 在 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}}
将渲染具有所有这些功能的精确图像。

© www.soinside.com 2019 - 2024. All rights reserved.