0

我有以下根据type实例动态创建一个字段:

class LVariableForm(ModelForm):

    def __init__(self, *args, **kwargs):
        super(someObj, self).__init__(*args, **kwargs)

        if self.instance:
            if self.instance.type == 'bool':
                self.fields['data'] = BooleanField()
            if self.instance.type == 'date':
                self.fields['data'] = DateField()
            if self.instance.type == 'float':
                self.fields['data'] = DecimalField()
            if self.instance.type == 'text':
                self.fields['data'] = TextInput()
            self.fields['data'].label = self.instance.name

    class Meta:
        model = LVariable

唯一的问题是创建的元素具有名称data和 id1_data

 <input name="data" id="1_data" dojoType="dijit.form.NumberTextBox">

我怎样才能改变这些?

4

1 回答 1

0

因为我在一个表单中使用了同一个 FormField 的多个实例,所以最好的办法是:

# forms.py
class LBooleanVForm(Form):
    def __init__(self,LTV, *args, **kwargs):
        super(LBooleanVForm, self).__init__(*args, **kwargs)
        self.fields[LTV.name] = BooleanField()

class LFloatVForm(Form):
    def __init__(self,LTV, *args, **kwargs):
        super(LFloatVForm, self).__init__(*args, **kwargs)
        self.fields[LTV.name] = FloatField()

class LTextVForm(Form):
    def __init__(self,LTV, *args, **kwargs):
        super(LTextVForm, self).__init__(*args, **kwargs)
        self.fields[LTV.name] = TextInput()

class LDateVForm(Form):
    def __init__(self,LTV, *args, **kwargs):
        super(LDateVForm, self).__init__(*args, **kwargs)
        self.fields[LTV.name] = DateField()

# views.py
ltv = LV.objects.filter(l_t=lt)
lvForm = []
for ltVars in ltv:
    if ltVars.type == 'bool':
        newField = LetterBooleanVariableForm(ltVars)
    elif ltVars.type == 'date':
        newField = LetterDateVariableForm(ltVars)
    elif ltVars.type == 'float':
        newField = LetterFloatVariableForm(ltVars)
    elif ltVars.type == 'text':
        newField = LetterTextVariableForm(ltVars)
    else:
        raise Http404
    lvForm.append(newField)
于 2012-05-31T11:57:52.477 回答