Убрать элементы с флажками в формах Django - PullRequest
2 голосов
/ 20 июля 2010

Я пишу форму с Джанго.Форма - это модельная форма для определенной модели, 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()

Это далеко не элегантное решение (с одной стороны, оно превращает любой, кроме самого общего шаблона, в настоящий кошмар для работы. Может кто-нибудь придумать более простой способ сделатьэто?

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Этот код не проверен, но что-то вроде этого должно сделать это:

class MyForm(forms.Form):
    # You can change the queryset in the __init__ method, but this should be a nice basis
    timeslots = forms.ModelMultipleChoiceFieldqueryset=Timeslot.objects.all(), widget=forms.CheckboxSelectMultiple)

    def save(self):
        # make sure you do a form.is_valid() before trying to save()
        for timeslot in self.cleaned_data['timeslots']:
            timeslot.delete()
1 голос
/ 20 июля 2010

Это может быть более чистое решение, если вы использовали набор форм модели для своих объектов TimeSlot.Вы смотрели на это вообще?

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#id1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...