ビューの状態を確認した後に動的フォームを作成しようとしていますが、そのアプローチ方法がわかりません。どのように私のビューからフォームのメタクラスのフィールド属性を設定するのですか?ビューを使用してModelFormのメタクラスフィールドを動的に更新します。
以下は私のviews.pyと私のforms.pyファイルです。私は私の意見からforms.py内のフィールドのリストを作成するにはどうすればよい
views.py
?
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django import forms
from .models import Master, Label, Assosiative
from .forms import LabelForm, MzasterForm, AssosiativeForm
def master(request,pk):
associate = get_object_or_404(Assosiative, pk=pk)
form = MasterForm(request.POST or None)
if associate.short_text1 == 1:
form.fields['short_text1'] = forms.CharField(label='Short text 1')
if associate.short_text2 == 1:
form.fields['short_text2'] = forms.CharField(label='Short text 2')
if associate.short_text3 == 1:
form.fields['short_text3'] = forms.CharField(label='Short text 3')
if associate.short_text4 == 1:
form.fields['short_text4'] = forms.CharField(label='Short text 4')
if associate.num_field1 == 1:
form.fields['num_field1'] = forms.CharField(label='Number field 1')
if associate.num_field2 == 1:
form.fields['num_field2'] = forms.CharField(label='Number field 2')
if form.is_valid():
try:
short_text1 = form.cleaned_data['short_text1']
short_text2 = form.cleaned_data['short_text2']
short_text3 = form.cleaned_data['short_text3']
short_text4 = form.cleaned_data['short_text4']
num_field1 = form.cleaned_data['num_field1']
num_field2 = form.cleaned_data['num_field2']
form.save()
except Exception, ex:
return HttpResponse("Error %s" %str(ex))
return render(request, 'master.html', {'form':form,})
forms.py
私は私が私の見解からthis questionと同様に
def masterForm(fields_list, *args, **kwargs):
class MasterForm(forms.ModelForm):
class Meta:
model = Master
fields = fields_list
def __init__(self):
super(MasterForm, self).__init__(*args, **kwargs)
return MasterForm()
joke = masterForm(('short_text1',))
[この質問](http://stackoverflow.com/questions/297383/dynamically -update-modelforms-meta-class)が役に立ちます。 – Alasdair
私はその質問が説明どおりに実装しようとしましたが、それでも動作しません。 – Hamfri
"うまくいかない"とは何ですか?より単純なバージョンの 'def get_form(exclude_list):'を試してみてください。フォームクラスを作成した後、それを2つの別々のステップとしてインスタンス化するともっと明確になると思います。 – Alasdair