我需要创建一个带有TemplateView的UpdateForm。为什么使用TemplateView?因为,我有一个属性是geo_location,而且我使用的是LeafLet映射,而LeafLet映射不适用于generic.UpdateView或其他相同类型的映射。
以下是我在更新中的观点:
class UpdateStore(LoginRequiredMixin, TemplateView):
template_name = 'store_form'
success_url = reverse_lazy('register:store_list')
def post(self, request, *args, **kwargs):
store_id = kwargs['store']
store = get_object_or_404(Store, pk=store_id)
form = StoreForm(request.POST, on_edit=True)
if form.is_valid():
form.save()
return redirect(reverse('register:store_list'))
else:
context = self.get_context_data()
context['data_form'] = form
return render(request, self.template_name, context)
return self.get(request)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
store_id = self.kwargs['store']
store = get_object_or_404(Store, pk=store_id)
data = {
'name': store.name,
'description': store.description,
'address': store.address,
'geo_loc': store.geo_loc,
'opened': store.opened
}
context['editing'] = True
context['data_form'] = StoreForm(initial=data, on_edit=True)
context['store'] = store
return context下面是我的模板代码:
{% extends 'base.html' %}
{% load bootstrap3 %}
{% load leaflet_tags %}
{% block extra_css %}
{% leaflet_css plugins="forms" %}
{% endblock %}
{% block body %}
<h1> Update Store </h1>
<form method="POST">
{% csrf_token %}
{{ form }}
{% buttons %}
<button type="submit">
{% bootstrap_icon "star" %} Save
</button>
{% endbuttons %}
</form>
{% endblock %}
{% block extra_js %}
{% leaflet_js plugins="forms" %}
{% endblock %}我尝试这样做,但在我的模板中,表单没有加载,并且我的模板是空白的:(。有人知道为什么吗?我需要另一种方法来获得其他东西吗?
谢谢。
发布于 2018-09-08 02:00:39
代码的问题是将表单放在context的data_form键中
context['data_form'] = StoreForm(initial=data, on_edit=True)然后在模板上,您尝试将其用于{{form}},而不是{{data_form}}。在此之后,应该呈现表单。
https://stackoverflow.com/questions/52224153
复制相似问题