Создать пустой набор запросов по умолчанию в полях формы Django

169

У меня есть эти поля в форме:

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

район исходит от клика по городу, а район - от клика по области. С queryset=MyDistrict.objects.all()и queryset=MyArea.objects.all()форма будет очень тяжелой. Как сделать наборы запросов пустыми по умолчанию?

TheNone
источник
мое предложенное редактирование улучшает сообщение. В общем, ни один пост не должен заканчиваться словами «спасибо». Это не личное, приятель. meta.stackexchange.com/questions/17878/…
Telarian

Ответы:

422

Вы можете создать пустой набор запросов:

MyModel.objects.none()

Хотя я не знаю, как вы собираетесь использовать эту форму, вы можете поместить ее в качестве набора запросов вашего поля, чтобы получить то, что вам нужно ...

Вы можете найти больше информации здесь

marianobianchi
источник
4
В случае использования ваш набор запросов изменяется в вашем представлении на основе параметров URL. Затем, на ваш взгляд, вы устанавливаете правильный набор запросов следующим образом: edit_form.fields ["asset"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek
Что если у меня нет модели, я просто делаю values_list('something', flat=True)?
Борис
2

@ radtek в комментарии должен быть ответом , как это полезно в подобных ситуациях , но с другим подходом , чем общепринятом ответа.

Если ваш набор запросов меняется с URL-адрес в вашем представлении.

Я расширяю ответ примером, который я использовал:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
sgauri
источник