【问题标题】:How to display django form in modal window?如何在模态窗口中显示 django 表单?
【发布时间】:2018-03-12 11:30:13
【问题描述】:

我看到了这个post,但对我没有帮助

在模态窗口中,不显示表单。

查看:

class CreateOrder(FormView):
    template_name = 'toner/add_order.html'

    form_class = OrderForm
    success_url = '/toner/'

    def form_valid(self, form):
        form.save()
        return super(CreateOrder, self).form_valid(form)

add_order.html:

<div id="order" class="modal fade" role="dialog">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-body">
            <div class="container txt-box">
                <form action="{% url 'add_order' %}" role="form" method="post">
                    {% csrf_token %}
                    {{ form.media }}
                    {{ form.address }}
                    {{ form.room }}
                    {{ form.count }}
                    <button class="btn btn-success" type="submit">
                        Done
                    </button>
                </form>
            </div>
        </div>
    </div>
</div>

main_page.html:

{% extends 'toner/base.html' %}

{% block main_page %}

....

<div>
    <button class="btn btn-primary" data-toggle="modal" data-
    target="#order">
        Order
    </button>
    {% include "toner/add_order.html" %}
</div>
{% endblock %}

网址:

url(r'add_order/$', CreateOrder.as_view(), name='add_order'),

如果我直接访问 url (/add_order) 就可以了。我可以看到表格。但是从 main_page.html 模态窗口是空的。也许有人已经为自己解决了这样的任务?

更新

from django.views.generic import ListView, FormView
from .models import Printer, Order
from .forms import OrderForm


class MainPageView(ListView):
    template_name = 'toner/main_page.html'

    model = Printer

    def get_context_data(self, **kwargs):
        context = super(MainPageView, self).get_context_data(**kwargs)
        context['printer'] = Printer.objects.all()
        context['order'] = Order.objects.all()
        return context


class CreateOrder(FormView):
    template_name = 'toner/add_order.html'

    form_class = OrderForm
    success_url = '/toner/'

    def form_valid(self, form):
        form.save()
        return super(CreateOrder, self).form_valid(form)

【问题讨论】:

    标签: django


    【解决方案1】:

    它不起作用,因为您没有在视图中传递表单。你必须以main_page.html的观点来看待这个。

    因为您调用的是 main_page.html 视图而不是 CreateOrder 视图,这就是 Django 可以呈现您的表单的原因。如果您发布您的主要观点,我可以帮助您。

    我不确定基于类的视图,但应该是这样的:

    class MainPageView(ListView, FormView):
        template_name = 'toner/main_page.html'
    
        model = Printer
    
        form_class = OrderForm
        success_url = '/toner/'
    
        def form_valid(self, form):
            form.save()
            return super(MainPageView, self).form_valid(form)
    
        def get_context_data(self, **kwargs):
            context = super(MainPageView, self).get_context_data(**kwargs)
            context['printer'] = Printer.objects.all()
            context['order'] = Order.objects.all()
            return context
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2012-10-29
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多