Django - 当用户选择地图上的点时,如何以模式形式包含地图并将坐标保存到数据库?

Posted

技术标签:

【中文标题】Django - 当用户选择地图上的点时,如何以模式形式包含地图并将坐标保存到数据库?【英文标题】:Django - How to include a map in a modal form and save coordinates to database when user selects point on map? 【发布时间】:2019-03-19 09:06:31 【问题描述】:

我正在从事一个项目,并且是 Web 开发的学生。

我正在 Django 中制作应用程序。当用户使用我制作的表单创建新旅行时,我想向该表单添加地图,以便用户只需单击地图上的一个点即可获取坐标以保存到该旅行的数据库中。

我想保存每次新行程的坐标,以便我可以在每个用户的个人资料页面上呈现地图,向他们显示他们在数据库中进行的每次行程的标记。

请帮忙!

谢谢

这里有一些代码:

models.py

class Trip (models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE, related_name='trips') 
    start_date = models.DateField()
    end_date = models.DateField()
    trail =  models.CharField(max_length=300)
    permit = models.URLField(blank=True, null=True)
    completed = models.BooleanField(default=False) 
    location = models.CharField(blank=True, max_length=400)
    lat = models.DecimalField(blank=True, null=True, max_digits=9, decimal_places=6)
    lng = models.DecimalField(blank=True, null=True, max_digits=9, decimal_places=6)
    created_at = models.DateField(auto_now_add =True)

def __str__ (self):
    return self.trail

def total_days(self):
    return (self.end_date - self.start_date).days

forms.py

class CreateTrip(forms.ModelForm):
    start_date = forms.DateField(
        widget=forms.TextInput(     
            attrs='type': 'date' 
        )
    )     
    end_date = forms.DateField(
        widget=forms.TextInput(     
            attrs='type': 'date' 
        )
    )


    class Meta():
        model = models.Trip
        fields = ('trail','location', 'permit', 'completed', 'start_date', 'end_date')

【问题讨论】:

请添加您目前尝试过的代码。 【参考方案1】:

在我看来,您有几个要存储在数据库中的多对一关系。我的回答基于此文档:

https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_one/

您的用户可以进行多次旅行。

所以你会有一个名为 Trip 的模型,它看起来像:

class Trip(models.Model):
    name = models.CharField(max_length=100)
    create_date = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User)
    ... whatever else ... 

而且您的行程有积分,所以您可能需要这样的模型:

class Point(models.Model):
    lat = models.DecimalField(blank=True, null=True, max_digits=9, decimal_places=6)
    lng = models.DecimalField(blank=True, null=True, max_digits=9, decimal_places=6)
    order = models.IntegerField() # ordering for the points.
    create_date = models.DateTimeField(auto_now_add=True)
    trip = models.ForeignKey(Trip)
    ... whatever else ... 

【讨论】:

以上是关于Django - 当用户选择地图上的点时,如何以模式形式包含地图并将坐标保存到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

交互式地图上的工具提示

如何在 Android 模拟器中手动选择 lat 和 long 而不是选择地图上的点,

A*算法的理解与简单实现

用户在地图上标记点时如何获取经纬度值?

反应原生地图:如何通过用户界面向地图添加带有属性和标记的点

如何从球面上的当前点(纬度/经度)找到线段上最近的点