如何使用TemplateView创建UpdateForm?

时间:2018-09-07 14:02:30

标签: django django-forms django-views django-class-based-views django-leaflet

我需要使用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

我尝试了此操作,但是在我的模板中,窗体没有加载,并且我的模板空白:(。有人知道为什么吗?我需要另一种方法来获取其他东西吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是您将表单放在data_form的{​​{1}}键中:

context

,然后在模板上尝试将其与context['data_form'] = StoreForm(initial=data, on_edit=True) 而非{{form}}一起使用。之后,应呈现表单。