Create empty queryset by default in django form fields

I have this fields in form:

city = forms.ModelChoiceField(label="city", queryset=MyCity.objects.all())
district = forms.ModelChoiceField(label="district", queryset=MyDistrict.objects.all())
area = forms.ModelChoiceField(label="area", queryset=MyArea.objects.all())

district comes from click on city and area comes from click on area. With queryset=MyDistrict.objects.all() and queryset=MyArea.objects.all() form will be very heavy. How can I make querysets empty by default?


Solution 1:

You can have an empty queryset by doing this:

MyModel.objects.none()

Although i don't know how are you going to use that form, you can put that as your field's queryset in order to get what you need...

You can find more information here

Solution 2:

@radtek's comment should be an answer as it is useful in similar scenarios but with different approach than the accepted answer.

If your queryset changes with the url in your view.

I am extending the answer with example as I used:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)