【问题标题】:How to pass form to Class-based generic views(TodayArchiveView)?如何将表单传递给基于类的通用视图(TodayArchiveView)?
【发布时间】:2013-01-09 03:50:33
【问题描述】:

url.py

from django.conf.urls import patterns, include, url
import os.path
from crm.views import *

urlpatterns += patterns('',
    (r'^test/$', tView.as_view()),
)

views.py

from django.views.generic import TodayArchiveView
from crm.forms import *
from crm.models import *

class tView(TodayArchiveView):
    model = WorkDailyRecord
    context_object_name = 'workDailyRecord'
    date_field = 'date'
    month_format = '%m'
    template_name = "onlyWorkDailyRecord.html"
    form_class = WorkDailyRecordForm ################## ADD

tView 是通用视图.... WorkDailyRecord 在 models.py 中定义模型

我想将表单(forms.py 中的'WorkDailyRecordForm' 类)传递给模板(onlyWorkDailyRecord.html)

怎么样?

添加

forms.py

from django import forms

class WorkDailyRecordForm(forms.Form):
    contents = forms.CharField(label='',
            widget=forms.Textarea(attrs={'placeholder': 'contents', 'style':'width:764px; height:35px;'}),
            required=False,
        )
    target_user = forms.CharField(label='',
            widget=forms.TextInput(attrs={'placeholder': 'target', 'style':'width:724px'}),
            required=False,
        )

onlyWorkDailyRecord.html

<form method="post" action="." class="form-inline" id="save-form">
    {{ form.as_table }}
    <button type="submit" class="btn btn-mini" id="workDailyRecord-add">작성</button>
</form>

【问题讨论】:

    标签: python django python-2.7 django-generic-views django-1.4


    【解决方案1】:

    在基于类的视图中,您需要提及form_class

    form_class = WorkDailyRecordForm
    

    一个简单的例子:

    class tView(TodayArchiveView):
        form_class = WorkDailyRecordForm
        template_name = 'onlyWorkDailyRecord.html'
        model = WorkDailyRecord
    
        def form_valid(self, form, **kwargs):
            instance = form.save(commit=True)
            return HttpResponse('Done')
    
        def dispatch(self, request, *args, **kwargs):
            return super(tView, self).dispatch(request, *args, **kwargs)
    

    更多信息请阅读generic-editing in class based views

    【讨论】:

    • 你为你的类视图写了dispatch函数吗?
    • Aamir Adnan//也许...不。我不知道该怎么办?
    • 我添加了一个简单的例子。希望这会有所帮助。
    • 谢谢!顺便说一句,我在“onlyWorkDailyRecord.html”中写了“{{ form.as_table }}”。是这样吗??
    • 是的,没错。 form.as_pform.as_table 都应该工作。或手动迭代表单字段。
    【解决方案2】:

    我在将表单类传递给泛型时遇到了麻烦,我可以通过重写 get_context_data() 函数来做到这一点,以防万一有人也在寻找它。

    Mozilla 文档中的一个示例:

    class BookListView(generic.ListView):
        model = Book
    
        def get_context_data(self, **kwargs):
            # Call the base implementation first to get the context
            context = super(BookListView, self).get_context_data(**kwargs)
            # Create any data and add it to the context
            context['some_data'] = 'This is just some data'
            return context
    

    您可以将表单对象传递给上下文字典中的键。

    可以找到更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2011-09-03
      • 1970-01-01
      相关资源
      最近更新 更多