Buat queryset kosong secara default di bidang formulir Django

169

Saya memiliki bidang ini dalam bentuk:

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

kabupaten berasal dari klik pada kota dan daerah berasal dari klik pada daerah. Dengan queryset=MyDistrict.objects.all()dan queryset=MyArea.objects.all()bentuk akan sangat berat. Bagaimana saya bisa membuat queryset kosong secara default?

Tidak Ada
sumber
edit yang saya sarankan meningkatkan posting. Secara umum, tidak ada posting yang harus diakhiri dengan "terima kasih". Itu bukan pribadi, bud. meta.stackexchange.com/questions/17878/…
Telarian

Jawaban:

422

Anda dapat memiliki queryset kosong dengan melakukan ini:

MyModel.objects.none()

Meskipun saya tidak tahu bagaimana Anda akan menggunakan formulir itu, Anda dapat menempatkan itu sebagai kueryset bidang Anda untuk mendapatkan apa yang Anda butuhkan ...

Anda dapat menemukan informasi lebih lanjut di sini

marianobianchi
sumber
4
Dalam kasus penggunaan, kueryset Anda berubah dalam tampilan Anda berdasarkan parameter url. Kemudian dalam tampilan Anda, Anda mengatur queryset yang benar seperti: edit_form.fields ["asset"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek
Bagaimana jika saya tidak memiliki model, saya hanya melakukan values_list('something', flat=True)?
Boris
2

@ radtek ini komentar harus jawaban seperti itu berguna dalam skenario yang sama tetapi dengan pendekatan yang berbeda dari jawaban yang diterima.

Jika kueryset Anda berubah dengan url di tampilan Anda.

Saya memperluas jawaban dengan contoh seperti yang saya gunakan:

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