The constructor for forms.ModelChoiceField requires a queryset. I do not know the queryset until the request happens. Distilled:
forms.ModelChoiceField
# models.py cla
Override the form's __init__ method and set the queryset there.
__init__
class FooForm(forms.Form): bar = forms.ModelChoiceField(queryset=Bar.objects.none()) def __init__(self, *args, **kwargs): qs = kwargs.pop('bars') super(FooForm, self).__init__(*args, **kwargs) self.fields['bar'].queryset = qs