Ich habe ein Projekt, in dem Personen Variablen für ein Formular erstellen können und andere Benutzer dieses Formular ausfüllen. Wenn sie das genannte Formular erstellen, können sie die Antwort aus drei verschiedenen Typen auswählen: aus einer Werteliste, einer Ganzzahl oder einer Zeichenfolge. Grundsätzlich erstelle ich ein Formset aller Variablen, die der Benutzer für dieses Formular erstellt hat, aber wenn es sich um eine Liste handelt, möchte ich den Typ der Eingabe von einem CharField in ein ChoiceField ändern.Ändern des Feldtyps in einer Django-Ansicht
Also das ist meine Ansicht ist:
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)
Und meine 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
Der letzte Druck war nur um zu sehen, ob das Feld tatsächlich geändert wurde, was es ist, aber wenn ich nach dem Aufruf von setList den gleichen Druck in meiner Ansicht mache, sind meine Felder immer noch
Kann ich sowieso den passenden Typ nach dem Erstellen des Formulars wählen?