Как создать UpdateForm с TemplateView? - PullRequest
0 голосов
/ 07 сентября 2018

Мне нужно создать UpdateForm с TemplateView. Почему с 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 %}

Я пытаюсь это сделать, но в моем шаблоне формы не загружаются, и мой шаблон очищается :(. Кто-то знает, почему? Мне нужен другой метод для получения чего-либо еще?

Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Проблема с вашим кодом заключается в том, что вы помещаете форму в data_form ключ context:

context['data_form'] = StoreForm(initial=data, on_edit=True)

и затем в шаблоне вы пытаетесь использовать его с {{form}} вместо {{data_form}}. После этого форма должна быть предоставлена.

...