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