Changing field type in a Django view

I have a project, where people will be able to create variables for a form, and then other users will fill that form. When they create the said form, they can chose the answer to be of 3 different types : From a list of value, an integer, or a string. Basically, I create a formset of all the variables the user created for this form, but if it is a list, I want to change the type of the input from a CharField to a ChoiceField.

So this is my view :

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)

And my form:

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

The last print was just to see if the field was indeed changed, which it is, but if I do the same print in my view after calling setList, my field are still

Is there anyways I could choose the appropriate type after creating the form?