根据实例值创建表单小部件

时间:2011-11-11 15:28:35

标签: django django-forms

我有以下型号:

VARIABLE_CHOICES = (
    ('bool', 'On/Off'),
    ('date', 'Date'),
    ('float', 'Number'),
    ('text', 'Text'),
)

class LetterVariable(models.Model):
    name = models.CharField(max_length=20)
    type = models.CharField(max_length=5, choices=VARIABLE_CHOICES)
    data = models.CharField(max_length=100)

我想创建一个表单,当我从数据库中传递LetterVariable的实例时,它将基于datatype创建相应的小部件。

我有什么想法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

class LetterVariableForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(LetterVariableForm, self).__init__(*args, **kwargs)

        if not self.instance:
           raise Exception('You forgot the instance!');

        if self.instance.type == 'something':
            self.fields['data'].widget = forms.SomeWidget()