Создать пустой набор запросов по умолчанию в полях формы 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()форма будет очень тяжелой. Как сделать наборы запросов пустыми по умолчанию?


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

Ответы:


422

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

MyModel.objects.none()

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

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


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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.