前提・実現したいこと
djangoでフォーム入力画面を作成しています。
企業情報フォーム(CompanyForm)を1件、サービス内容フォーム(ServiceFrom)を複数件表示したいです。
●forms.py
python
1class CompanyForm(forms.Form): 2 company_name = forms.CharField(label='会社名',max_length=50) 3 department = forms.CharField(label='部署名',max_length=100) 4 charge_of_person = forms.CharField(label='ご担当者様',max_length=50) 5 email = forms.EmailField(label='メールアドレス',max_length=50) 6 7class ServiceForm(forms.Form): 8 service_name= forms.CharField(label='サービス名',max_length=100) 9 description = forms.CharField(label='サービス内容')
●views.py
python
1def make_test_formset(request): 2 TestFormSet = forms.formset_factory( 3 form=ServiceForm, 4 extra=3, 5 max_num=4 6 ) 7 8 if request.method == 'POST': 9 formset = TestFormSet(request.POST) 10 if formset.is_valid(): 11 data = repr(formset.cleaned_data) 12 return HttpResponse(data) 13 else: 14 formset = TestFormSet() 15 16 return render(request, app_name + '/form.html', {'formset': formset})
html
1{% extends 'base.html' %} 2{% block content %} 3<form method="post"> 4 <table> 5 {{ formset.as_table }} 6 </table> 7 8 {% csrf_token %} 9 <button type="submit">submit</button> 10</form> 11{% endblock %}
ここまででServiceFormを複数件表示するところまでは出来ました。
プラスCompanyFormの表示がしたいです。
調べているとModelFormの場合はinlineformset_factoryが利用できそうなのですが、
今回はDB登録しないため、modelは作成していません。
試したこと
inlineformset_factoryを無理やり使ってみました。
python
1def make_test_formset(request): 2 # TestFormSet = forms.formset_factory( 3 # form=ServiceForm, 4 # extra=3, 5 # max_num=4 6 7 # ↓に書き換えてみました 8 TestFormSet = inlineformset_factory( 9 form = CompanyForm, 10 formset = ServiceForm 11 ) 12 13 if request.method == 'POST': 14 formset = TestFormSet(request.POST) 15 if formset.is_valid(): 16 17 data = repr(formset.cleaned_data) 18 return HttpResponse(data) 19 else: 20 formset = TestFormSet() 21 return render(request, app_name + '/form.html', {'formset': formset})
発生している問題・エラーメッセージ
やはりmodelがないとダメなようです。
TypeError: inlineformset_factory() missing 2 required positional arguments: 'parent_model' and 'model'
DB登録しない場合でもmodelを作ってよいのか、inlineformset_factoryを使わずに良い方法があるのか..
というところで悩んでいます。
補足情報(FW/ツールのバージョンなど)
Python 3.8.0
Django 2.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。