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あり、ID が1_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 に答える