245

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?

0

2 Answers 2

619

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

Sign up to request clarification or add additional context in comments.

2 Comments

In the use case that your queryset changes in your view based on url parameters. Then in your view you set the correct queryset like so: edit_form.fields["asset"].queryset = Asset.objects.filter(location_id=location_id)
What if I don't have a model, I'm just doing a values_list('something', flat=True)?
3

@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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.