单视图中的多个表单

时间:2014-05-27 21:14:19

标签: python django django-forms

所以我现在使用我的EmployeeForm中的Django SelectDateWidget,但我只能在视图中加载一个form_class。理想情况下,我希望能够在我的视图中加载多个form_classes,或者以其他方式在我的formset上使用SelectDateWidget。

现在唯一有效的小部件是EmployeeForm中的小部件。我需要帮助来弄清楚如何利用三种表格中的小部件。

非常感谢任何和所有帮助!

Forms.py

from datetime import date
from django import forms
from django.forms import ModelForm, DateInput, DateField, extras
from django.forms.extras.widgets import SelectDateWidget
from extra_views import InlineFormSet, CreateWithInlinesView, UpdateWithInlinesView
from extra_views.generic import GenericInlineFormSet
from django.forms.models import inlineformset_factory
from employee_summary.models import Employee, Work_Record, Training_Record, FAA_Certificate

class EmployeeForm(ModelForm):

    class Meta:
        model = Employee
        widgets = {
            'hire_date': SelectDateWidget(years=range(date.today().year, 1975, -1)),
            'recurrent_due': SelectDateWidget(years=range(date.today().year, 1975, -1)),
            'super_da_due': SelectDateWidget(years=range(date.today().year, 1975, -1)),
            'red_badge': SelectDateWidget(years=range(date.today().year, 1975, -1)),
        }


class WorkRecordFormSet(InlineFormSet):
    model = Work_Record
    prefix = "work_record"
    extra = 1

    class Meta:
        widgets = {
            'start_date': SelectDateWidget(years=range(date.today().year, 1975, -1)),
            'end_date': SelectDateWidget(years=range(date.today().year, 1975, -1)),
        }

class TrainingRecordFormSet(InlineFormSet):
    model = Training_Record
    prefix = "training_record"
    extra = 1

    class Meta:
        widgets = {
            'date_earned': SelectDateWidget(years=range(date.today().year, 1975, -1)),
        }

class FAACertificateFormSet(InlineFormSet):
    model = FAA_Certificate
    prefix = "faa_certificate"
    extra = 1

    class Meta:
        widgets = {
            'issue_date': SelectDateWidget(years=range(date.today().year, 1975, -1)),
        }

Views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext, loader
from django.views.generic import DeleteView, ListView
from extra_views import InlineFormSet, CreateWithInlinesView, UpdateWithInlinesView, SearchableListMixin, SortableListMixin
from extra_views.generic import GenericInlineFormSet
from employee_summary.models import *
from employee_summary.forms import EmployeeForm, WorkRecordFormSet, TrainingRecordFormSet, FAACertificateFormSet
from django.shortcuts import render

class EmployeeCreate(CreateWithInlinesView):
    model = Employee
    form_class = EmployeeForm
    inlines = [WorkRecordFormSet, TrainingRecordFormSet, FAACertificateFormSet]
    template_name = "create.html"
    success_url = '/employees'

1 个答案:

答案 0 :(得分:0)

Formsets没有Meta类,你不能像这样设置小部件(或任何属性)。相反,您需要为每个内联模型定义一个表单类,就像使用主要模型一样,然后在那里设置属性,然后将表单类传递给inlineformset_factory以创建表单集类。

相关问题