Я пишу форму с Джанго.Форма - это модельная форма для определенной модели, Experiment
.С каждым Experiment
связано несколько TimeSlot
моделей, связанных с ForeignKey('Experiment')
.Я хотел бы иметь форму с возможностью удалить один или несколько экземпляров TimeSlot
из EditExperimentForm
, установив флажки.
В настоящее время я определяю все флажки в модели с помощью цикла в функции init в EditExperimentForm:
def __init__(self, *args, **kwargs):
super(EditExperimentForm,self).__init__(*args,**kwargs)
experiment = self.instance
for timeslot in experiment.timeslot_set.all():
self.fields['timeslot-'+str(timeslot.id)] = BooleanField(label="Remove Timeslot at "+str(timeslot.start),required=False)
И затем обрабатываю их при отправке с помощьюрегулярное выражение:
timeslot_re = re.compile(r'^timeslot-([\d]+)$')
for key in form.data.keys():
match = timeslot_re.match(key)
if match:
timeslot = TimeSlot.objects.get(id=match.expand(r'\1'))
timeslot.delete()
Это далеко не элегантное решение (с одной стороны, оно превращает любой, кроме самого общего шаблона, в настоящий кошмар для работы. Может кто-нибудь придумать более простой способ сделатьэто?