Formset с выбором виджета для каждого поля - PullRequest
1 голос
/ 06 мая 2011

Я делаю интерфейс для пользовательской среды тестирования. Каждый тест имеет несколько связанных сценариев, и каждый сценарий имеет несколько связанных параметров, а каждый параметр имеет тип параметра. Я хочу иметь возможность создать форму для редактирования всех параметров для данного теста, чтобы каждое из полей отображалось и проверялось в соответствии со связанным типом параметра, т. Е. Если тип параметра «bool», то ввод должен быть флажком , если тип является URL-адресом, он должен быть проверен соответствующим образом.

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)
    ...
...

В настоящее время my views.py переупаковывает типы параметров, идентификатор экземпляра параметра и информацию о значении, и в моем шаблоне отображаются разные входные данные в зависимости от типа. А затем с помощью request.POST.getlist () получить информацию обратно в соответствующие записи.

Мне кажется, должен быть способ заставить формы в наборе форм выбирать виджет на основе типа. Или что-то лучше моего нынешнего пути.

...