2009-03-17 2 views
1

Итак, у меня есть модель с турнирами ManyToManyField, называемыми турнирами. У меня есть ModelForm с двумя турнирных полями:, разделяющий ManyToManyField над несколькими полями формы в ModelForm

pay_tourns = forms.ModelMultipleChoiceField(
         queryset=Tourn.objects.all().active().pay_tourns(), 
         widget=forms.CheckboxSelectMultiple()) 
rep_tourns = forms.ModelMultipleChoiceField(
         queryset=Tourn.objects.all().active().rep_tourns(), 
         widget=forms.CheckboxSelectMultiple()) 

методов после всех() Есть от наследнике QuerySet. Когда я сохраняю форму на мой взгляд, я делаю так:

post.tournaments = (post_form.cleaned_data.get('pay_tourns') 
           + post_form.cleaned_data.get('rep_tourns')) 

В любом случае, все это работает отлично. То, что я не могу понять, как это сделать, - заполнить эти поля формы, когда я загружаю существующий пост. То есть, когда я передаю экземпляр = сообщение в форму. Есть идеи?

ответ

1

Паоло Бергантино был на правильном пути и помог мне найти его. Это было решением:

+0

Хорошее решение, приятно знать. :) –

2

Вы могли бы сделать что-то подобное в ModelForm:

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 

    instance = kwargs.get('instance') 
    if instance: 
     self.fields['pay_tourns'].queryset.filter(post=instance) 
     self.fields['rep_tourns'].queryset.filter(post=instance) 

Я не вижу, почему это не будет работать, но я собираюсь проверить это, просто чтобы убедиться ...

EDIT: Протестировано и работает.

+0

, который работает, но он не делает то, что мне нужно. Вместо того, чтобы ограничивать набор запросов, мне нужно иметь те, которые связаны с проверкой сообщения. Это означает, что только турниры, связанные с сообщением, являются параметрами. – defrex

+0

Оооо, хорошо. одна секунда тогда ... –

 Смежные вопросы

  • Нет связанных вопросов^_^