具有每个字段小部件选择的Formset

时间:2011-05-05 20:18:13

标签: django django-models django-forms django-widget

我正在为自定义测试框架制作前端。每个测试都有一些相关的脚本,每个脚本都有一些相关的参数,每个参数都有一个参数类型。我希望能够创建一个表单来编辑给定测试的所有参数,并根据相关的参数类型显示和验证每个字段,即如果参数类型是'bool',则输入应该是一个复选框,如果类型是一个网址,它应该适当验证。

models.py:

...
PARAM_TYPES = (('bool', 'Boolean (Flag Only)'),
               ('int', 'Integer'),
               ('ip', 'IP Address'),
               ('txt', 'Text'),
               ('url', 'url'),
               ('path', 'File Path'))

class Parameter(models.Model):
    name = models.CharField(max_length=50)
    flag = models.CharField(max_length=20)
    type = models.CharField(max_length=20, choices=PARAM_TYPES)
    description = models.TextField(max_length=200)
    ...

class ParameterInstance(models.Model):
    parameter = models.ForeignKey(Parameter)
    value = models.CharField(max_length=50, blank=True)
    ...

class ScriptInstance(models.Model):
    name = models.CharField(max_length=50)
    test = models.ForeignKey(Test) # One node may have many ScriptIntances (OneToMany)
    script = models.ForeignKey(Script) # Many ScriptInstances to one Script (ManyToOne)
    parameter_instances = models.ManyToManyField(ParameterInstance, blank=True)
    ...
...

目前我的views.py正在重新打包参数类型,参数实例ID和值信息,我根据类型在模板中呈现不同的输入。然后使用request.POST.getlist()将信息返回到相应的记录中。

在我看来,应该有一种方法可以使formset中的表单根据类型选择一个小部件。或者比我目前的方式更好的其他东西。

0 个答案:

没有答案