2017-09-30 25 views
1

我看到這個post,但它沒有幫我如何在模態窗口中顯示django表單?

在模式窗口中,窗體不顯示。

查看:

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模態窗口是空的。也許有人爲自己解決了這樣的任務?

UPDATE

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) 

回答

3

它不工作,因爲你不及格的形式在視圖中。你必須這樣做,以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 
+0

毛裏西奧·科塔薩爾,非常感謝你!它工作正常! – Coveraver