我正在尝试基于Django(GeoDjango)和OpenStreetMap建立一个示例网站。到目前为止,我有一个简单的场景:
Models.py
class Parks(models.Model):
park_name_en = models.CharField(max_length=256)
description = models.TextField()
picture = models.ImageField()
geom = PolygonField()
@property
def picture_url(self):
return self.picture.url
def __unicode__(self):
return self.title
views.py
def park_insert(request):
form = ParkForm()
return render(request, 'addpark.html', {'form': form})
forms.py
class ParkForm(forms.ModelForm):
class Meta:
model = Parks
fields = ('park_name_en', 'description', 'picture',)
geom = forms.PolygonField()
也是最后但并非最不重要的模板addpark.html
<html>
<head>
{{ form.media }}
</head>
<body>
<div id="map">
<form enctype="multipart/form-data" method="post" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit"/>
</form>
</div>
</body></html>
当我打开模板页面时,所有字段都正确显示,除了PolygonField()以文本显示。如何在用户表单上也显示地图(我在管理面板中可以使用它,但是我想创建一个用于插入新公园的表单)
您需要描述“表单” models.py。
Models.py
从django.contrib.gis导入表格
class Parks(models.Model):
park_name_en = models.CharField(max_length=256)
description = models.TextField()
picture = models.ImageField()
geom = models.PointField(widget= forms.OSMWidget(attrs={'map_width': 800, 'map_height': 500}) )
@property
def picture_url(self):
return self.picture.url
def __unicode__(self):
return self.title
views.py
def park_insert(request):
form = ParkForm()
return render(request, 'addpark.html', {'form': form})
forms.py
class ParkForm(forms.ModelForm):
class Meta:
model = Parks
fields = ('park_name_en', 'description', 'picture',)
geom = forms.PolygonField()
尝试一下。看着这个https://docs.djangoproject.com/en/2.2/ref/contrib/gis/forms-api/#widget-classes