我需要使用TemplateView创建一个UpdateForm。为什么使用TemplateView?因为,我有一个名为geo_location的属性,并且正在使用LeafLet映射,因此LeafLet映射不适用于generic.UpdateView或其他相同类型的映射。
以下是我在更新中的观点:
%final%
这是我的模板代码:
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
我尝试了此操作,但是在我的模板中,窗体没有加载,并且我的模板空白:(。有人知道为什么吗?我需要另一种方法来获取其他东西吗?
谢谢。
答案 0 :(得分:0)
您的代码存在的问题是您将表单放在data_form
的{{1}}键中:
context
,然后在模板上尝试将其与context['data_form'] = StoreForm(initial=data, on_edit=True)
而非{{form}}
一起使用。之后,应呈现表单。