LaVOZs

The World’s Largest Online Community for Developers

'; Create empty queryset by default in django form fields - LavOzs.Com

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?

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

@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)
Related
In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?
How to combine two or more querysets in a Django view?
Django set default form values
How do I do a not equal in Django queryset filtering?
Filtering for empty or NULL names in a queryset
How to convert a Django QuerySet to a list
Change a Django form field to a hidden field
get class name for empty queryset in django
How create queryset to custom fields?
Django: Form ModelMultipleChoiceField with annotated queryset