2017-06-17 11 views
0

私は、人々がフォームの変数を作成し、他のユーザーがそのフォームを記入できるプロジェクトを持っています。これらのフォームを作成するときには、値、整数、または文字列のリストから3つの異なるタイプの回答を選択できます。基本的には、ユーザーがこのフォーム用に作成したすべての変数のformsetを作成しますが、リストの場合はCharFieldからChoiceFieldに入力のタイプを変更したいと考えています。Djangoビューのフィールドタイプを変更する

だからこれは私のビューです、

class InsertDonneeForm(forms.Form): 
    variable = Variable() 
    nomVar = 'Variable' 
    valeur = forms.CharField(label=nomVar, max_length=100) 

    def setList(self, variable): 
     choices = ListItem.objects.filter(variable=variable, modele=variable.modele) 
     valeur = forms.ModelChoiceField(queryset=choices)# or None) 
     print valeur 

最後の印刷は、フィールドが実際にそれがある、変更された場合だけで見ることだった。

def insererDonnee(request, modele, contexte=-1): 
    variables = Variable.objects.filter(modele=modele) 
    varIter = variables.iterator() 
    DonneeFormSet = formset_factory(InsertDonneeForm, extra=variables.count()) 
    submitAdress = "insererDonnee" 

if request.POST: 
    formset = DonneeFormSet(request.POST) 
else: 
    formset = DonneeFormSet() 
for formx in formset: 
    formx.variable = varIter.next() 
    formx.nomVar = formx.variable.nom 
    formx.fields['valeur'].label = formx.nomVar 

    # Here I call setList to change the type 
    if formx.variable.type_variable in ["SOLIST", "LIST"]: 
     formx.setList(formx.variable) 

そして、私のフォーム setListを呼び出した後に私のビューで同じ印刷を行うと、私のフィールドはまだ変わっていません

フォームを作成した後、適切なタイプを選択できましたか?

答えて

0

解決策が見つかりました。代わりに、フォームでフィールドを直接変更する方法のセットリストは、新しい選択フィールドを返します。

def setList(self, variable): 
    choices = ListItem.objects.filter(variable=variable, modele=variable.modele) 
    valeur = forms.ModelChoiceField(queryset=choices) 
    return valeur 

そしてビューで、私はちょうど私がしたい古いフィールドに、新しく作成されたフィールドを割り当てる必要があります変更:

if formx.variable.type_variable in ["SOLIST", "LIST"]: 
    formx.fields['valeur']= formx.setList(formx.variable) 
関連する問題