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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.