2017-06-17 63 views
0

我有一個項目,人們將能夠爲表單創建變量,然後其他用戶將填寫該表單。當他們創建所述表單時,他們可以選擇3種不同類型的答案:從值列表,整數或字符串。基本上,我創建了用戶爲這個表單創建的所有變量的formset,但是如果它是一個列表,我想將CharField的輸入類型更改爲ChoiceField。在Django視圖中更改字段類型

所以這是我觀點

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) 

而且我形式

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 

最後打印只是爲了看看現場確實變了,它是,但如果我在調用setList之後在我的視圖中執行相同的打印,我的字段仍然是

無論如何,我可以在創建表單後選擇適當的類型嗎?

回答

0

找到解決方案。該方法SETLIST,而不是形式直接更改領域,現在返回的新選擇領域:

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) 
相關問題