【问题标题】:Changing field type in a Django view在 Django 视图中更改字段类型
【发布时间】:2017-11-20 09:12:05
【问题描述】:

我有一个项目,人们可以在其中为表单创建变量,然后其他用户将填写该表单。当他们创建上述表单时,他们可以选择 3 种不同类型的答案:值列表、整数或字符串。基本上,我创建了用户为此表单创建的所有变量的表单集,但如果它是一个列表,我想将输入的类型从 CharField 更改为 ChoiceField。

这是我的观点

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 后在视图中执行相同的打印,我的字段仍然是

在创建表单后我是否可以选择合适的类型?

【问题讨论】:

    标签: python django forms django-views


    【解决方案1】:

    找到了解决办法。方法 setList,而不是直接在表单中更改字段,现在返回新的 Choice 字段:

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-09-29
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2016-06-09
      • 2015-12-30
      • 1970-01-01
      • 2021-06-28
      • 2012-05-19
      相关资源
      最近更新 更多