Я делаю интерфейс для пользовательской среды тестирования. Каждый тест имеет несколько связанных сценариев, и каждый сценарий имеет несколько связанных параметров, а каждый параметр имеет тип параметра. Я хочу иметь возможность создать форму для редактирования всех параметров для данного теста, чтобы каждое из полей отображалось и проверялось в соответствии со связанным типом параметра, т. Е. Если тип параметра «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 () получить информацию обратно в соответствующие записи.
Мне кажется, должен быть способ заставить формы в наборе форм выбирать виджет на основе типа. Или что-то лучше моего нынешнего пути.