我寫Django的一種形式。該表格是某個型號的型號表格,Experiment
。每個Experiment
都有與之相關的幾個TimeSlot
機型,具有ForeignKey('Experiment')
定義。我想要一個表單,可以通過選中框從EditExperimentForm
中刪除一個或多個TimeSlot
實例。在Django的複選框刪除項目形成
目前,我定義所有的複選框的模型由初始化功能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()
這遠非一件優雅的解決方案(一兩件事,它使任何東西,但最通用的模板直線上升噩夢的工作。誰能想到一個更簡單的方法來做到這一點?
這工作得很好,只有一個小的變化:它應該是時隙= forms.ModelMultipleChoiceField如果你想能夠檢查多個。 – stillinbeta 2010-07-21 19:28:53
我改變了它:) – Wolph 2010-07-21 19:35:48