首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用TemplateView创建UpdateForm?

如何使用TemplateView创建UpdateForm?
EN

Stack Overflow用户
提问于 2018-09-07 22:02:30
回答 1查看 436关注 0票数 0

我需要创建一个带有TemplateView的UpdateForm。为什么使用TemplateView?因为,我有一个属性是geo_location,而且我使用的是LeafLet映射,而LeafLet映射不适用于generic.UpdateView或其他相同类型的映射。

以下是我在更新中的观点:

代码语言:javascript
运行
复制
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

下面是我的模板代码:

代码语言:javascript
运行
复制
{% 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 %}

我尝试这样做,但在我的模板中,表单没有加载,并且我的模板是空白的:(。有人知道为什么吗?我需要另一种方法来获得其他东西吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-09-08 02:00:39

代码的问题是将表单放在contextdata_form键中

代码语言:javascript
运行
复制
context['data_form'] = StoreForm(initial=data, on_edit=True)

然后在模板上,您尝试将其用于{{form}},而不是{{data_form}}。在此之后,应该呈现表单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52224153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档