在Django中对多个表单进行子类化

时间:2011-07-14 14:44:39

标签: python django django-forms subclassing

我有两种形式:

class PersonForm(forms.Form):
  name = forms.CharField()

  def clean(self):
    print "Validating Person"

  def save(self):
    print "Saving Person"

def InstrumentForm(forms.Form):
  instrument = forms.CharField()

  def clean(self):
    print "Validating Instrument"

  def save(self):
    print "Saving Instrument"

我需要声明另一个表单,这个表单是这些表单的子类。我正在使用这种方法 替代FormWizard

def BandForm(PersonForm, InstrumentForm):

  def clean(self):
    print "Validating Band"

  def save(self):
    print "Saving Band"

我可以这样做吗?当我在BandForm上调用验证时,我希望首先在PersonForm上进行验证,然后在InstrumentForm上进行验证。当我调用save的{​​{1}}方法时,我希望先将数据保存在BandForm中,然后再保存在InstrumentForm上。

我基本上要做的是将数据一起保存到两个表单中。我遇到了BandForm的问题,并认为可能会这样做。

感谢。

1 个答案:

答案 0 :(得分:1)

将两个表单放在一个表单标记中(请参阅:https://docs.djangoproject.com/en/1.3/ref/forms/api/#prefixes-for-forms),然后根据需要验证并保存它们,例如在视图中:

form1 = PersonForm(request.POST or None, prefix='person')
form2 = InstrumentForm(request.POST or None, prefix='instrument')

if form1.is_valid() and form2.is_valid():
  form2.save()
  form1.save()
  # return redirect
# render forms