1

インラインフォームセットに切り替えた後、次のようになりました。

def dns_view(request, domain):
    dnszone = get_object_or_404(DNSSQL, zone = domain)

    form1 = EditDNSZone(instance = dnszone)
    forms = EditDNSEntry(instance = dnszone, prefix = 'entries')
    formsmx = EditDNSEntryMX(instance = dnszone, prefix = 'mxentries')

すべてのフォームを保存しようとした後、form1 のみを保存することができました。すべてのフォームを保存するにはどうすればよいですか?

4

1 に答える 1

1

Django のフォームセットは、同じフォームの複数のインスタンス用です。複数のフォーム クラスを保存しようとしていますが、これはフォームセットの対象ではありません。

1 つの方法は、フォームに含めたいすべてのフィールドを含むフォームを作成し、フォームを処理するときに、処理する個々のフォームを作成することです。以下は簡単な図です。モデルをイントロスペクトし、モデル フォームを自動的に作成するなど、凝ったこともできますが、それは長い話です...

class Form1(forms.Form):
  a_field = forms.CharField()


class Form2(forms.Form):
  b_field = forms.CharField()


class MainForm(forms.Form):
  a_field = forms.CharField()
  b_field = forms.CharField()
  def __init__(self, **kwargs):
    super(MainForm, self).__init__(**kwargs)
    # This will work because the field name matches that of the small forms, data unknow to
    # a form will just be ignored. If you have something more complex, you need to append
    # prefix, and converting the field name here.
    form1 = Form1(**kwargs)
    form2 = Form2(**kwargs)
于 2013-10-18T09:03:37.813 に答える