私はクラスベースのビューでdjango formsetを使いたいです。 これは、ビュー、django __init__引数エラーを引き起こすメソッド
class PeriodCreate(RequestPassingFormViewMixin, WammuCreateView):
model = Chain
template_name = 'dashboard/period_form.html'
form_class = ChainForm
def get_object(self):
chain = Chain.objects.get(pk=self.kwargs['chain_pk'])
return chain
def get_success_url(self):
return reverse('dashboard_period_list', kwargs={'chain_pk': self.object.chain.id, })
def get_context_data(self, **kwargs):
context = super(PeriodCreate, self).get_context_data(**kwargs)
return context
def get_form_kwargs(self, *args, **kwargs):
kwargs = super(PeriodCreate, self).get_form_kwargs(*args, **kwargs)
chain = get_object_or_404(Chain, pk=self.kwargs['chain_pk'])
period = Period(chain=chain)
kwargs['instance'] = period
return kwargs
def get(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
PeriodInlineFormSet = inlineformset_factory(Chain, Period,
form=PeriodInlineForm,
can_delete=True,
extra=12)
PeriodInlineFormSet.form = staticmethod(curry(PeriodInlineForm, request=request, chain=self.object))
period_formset = PeriodInlineFormSet()
return self.render_to_response(
self.get_context_data(form=form,
period_inline_formset=period_formset))
def post(self, request, *args, **kwargs):
self.object = Chain()
form = self.get_form(self.form_class)
PeriodInlineFormSet = inlineformset_factory(Chain, Period,
form=PeriodInlineForm,
can_delete=True,
extra=5)
PeriodInlineFormSet.form = staticmethod(curry(PeriodInlineForm))
if form.is_valid():
self.object = form.save(commit=False)
period_formset = PeriodInlineFormSet(request.POST, instance=self.object)
if period_formset.is_valid():
self.object.save()
period_formset.save()
return super(PeriodCreate, self).form_valid(form)
else:
return self.render_to_response(
context=self.get_context_data(form=form, period_inline_formset=period_formset))
else:
period_formset = PeriodInlineFormSet(request.POST,instance=self.object)
return self.render_to_response(
context=self.get_context_data(form=form, period_inline_formset=period_formset))
があり、これは私のフォーム、
class PeriodForm(RequestPassingFormMixin, ModelForm):
class Meta:
model = Period
fields = ['start_date', 'end_date', 'year', 'description']
であり、ここで私の 'RequestPassingFormMixin' です:
class RequestPassingFormMixin(object):
def __init__(self, request, param, *args, **kwargs):
self.request = request
self.param = param
super(RequestPassingFormMixin, self).__init__(*args, **kwargs)
が、私は次のエラーを取得しています、
TypeError at ....
__init__() takes at least 3 arguments (2 given)
このエラー私はフォームセットをレンダリングしたテンプレートを示すので、私も(私は森をレンダリングしている部分のみを)テンプレートを与えている、
<tbody>
{% csrf_token %}
{{ period_inline_formset.management_form }}
{% for period_form in period_inline_formset %}
{% for hidden in period_form.hidden_fields %}
{{ hidden }}
{% endfor %}
{{period_form.pk}}
<tr>
<td>{{ period_form.start_date }}</td>
<td>{{ period_form.end_date }}</td>
<td>{{ period_form.year }}</td>
<td>{{ period_form.description }}</td>
<td> {% if period_formset.can_delete %}
{{ period_form.DELETE }} {% endif %}</td>
</tr>
{% endfor %}
</tbody>
私はDjangoのフォームセットを使用して使用しておりません、限りあなたはあなたのコードを持ついくつかの問題を持っている
あなたの答えのおかげで、それは私のインラインフォームセットを表示するために私を助け、ええそこに私のコードのバグの多くは、そのない私のコード、その生産のコードは、実際にあったと私はit.nowに仕事をしなければなりません問題は、私のフォームが保存されていないか、またはフォームが無効であると言うことができるので、私はそれをポストしたり保存したいときにフォームに戻ってくることができます。あなたはこの問題を解決するためにさらに助けてください、私はdjangoインラインformsetで動作するために使用されていないため、私は 'かもしれない'と述べた。私はあなたに追加の質問であることを知っています。しかし、あなたがこの問題について私をさらに助けてくれれば幸いです。 @Burhan Khalid – RTan
詳細について別の質問をして、この質問へのリンクを追加してください。私はあなたが書式の問題に直面する唯一の人ではないと確信しています。 –
私はこの問題に関する新しい質問を投稿しています。このリンクはhttp://stackoverflow.com/questions/35123355/data-is-not-saving-in-django-formsetです。 – RTan