web-dev-qa-db-ja.com

Djangoフォームフィールドにデフォルトで空のクエリセットを作成する

フォームにこのフィールドがあります:

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()の場合、フォームは非常に重くなります。デフォルトでクエリセットを空にするにはどうすればよいですか?

141
TheNone

これを行うことにより、空のクエリセットを作成できます。

MyModel.objects.none()

そのフォームをどのように使用するのかわかりませんが、必要なものを取得するためにそれをフィールドのクエリセットとして置くことができます...

より多くの情報を見つけることができます こちら

361
marianobianchi

@radtekの comment は、同様のシナリオでは有用ですが、受け入れられた回答とは異なるアプローチで役立つため、回答にする必要があります。

ビューのURLでクエリセットが変更された場合。

私は使用した例で答えを拡張しています:

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