Ответ 1
Вы не сможете использовать для этого ModelChoiceField. Вам нужно будет вернуться к стандартному ChoiceField и создать список опций вручную в форме __init__
. Что-то вроде:
class PromotionListFilterForm(forms.Form):
promotion_type = forms.ChoiceField(label="Promotion Type", choices=(),
widget=forms.Select(attrs={'class':'selector'}))
....
EXTRA_CHOICES = [
('AP', 'All Promotions'),
('LP', 'Live Promotions'),
('CP', 'Completed Promotions'),
]
def __init__(self, *args, **kwargs):
super(PromotionListFilterForm, self).__init__(*args, **kwargs)
choices = [(pt.id, unicode(pt)) for pt in PromotionType.objects.all()]
choices.extend(EXTRA_CHOICES)
self.fields['promotion_type'].choices = choices
Вам также нужно сделать что-то умное в методе clean()
, чтобы уловить эти дополнительные параметры и справиться с ними соответствующим образом.