GeoDjango在模型的模板表单上显示地图



我正在尝试构建一个基于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()

最后但并非最不重要的是模板添加公园.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

from django.contrib.gis import forms

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

我在 forms.py 中添加了小部件,因为在模型中添加此属性会导致异常。

forms.py

from django.contrib.gis import forms
from .models import Memory
class AddMemoryForm(forms.Form, forms.ModelForm):
class Meta:
model = Memory
fields = ['title', 'description', 'location']
widgets = {
'title': forms.TextInput(attrs={'class': 'form-input'}),
'description': forms.Textarea(attrs={'cols': 60, 'rows': 10}),
'location': forms.OSMWidget
}

views.py

class ShowMemory(LoginRequiredMixin, UpdateView):
template_name = 'world/detail_memory.html'
model = Memory
form_class = UpdateMemoryForm
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = context['memory']
return context
def get_success_url(self):
return reverse_lazy('memory')
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)

UpdateMemoryForm 类似于 AddMemoryForm

最新更新