Crea queryset vuoto per impostazione predefinita nei campi modulo django


169

Ho questi campi in forma:

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

il distretto viene dal clic sulla città e l'area viene dal clic sull'area. Con queryset=MyDistrict.objects.all()e la queryset=MyArea.objects.all()forma sarà molto pesante. Come posso rendere vuoti i queryset per impostazione predefinita?


la mia modifica suggerita migliora il post. In generale, nessun post dovrebbe terminare con "grazie". Non è personale, amico. meta.stackexchange.com/questions/17878/…
Telarian

Risposte:


422

Puoi avere un queryset vuoto facendo questo:

MyModel.objects.none()

Anche se non so come hai intenzione di utilizzare quel modulo, puoi metterlo come queryset del tuo campo al fine di ottenere ciò di cui hai bisogno ...

Puoi trovare maggiori informazioni qui


4
Nel caso in cui il tuo queryset cambi nella tua vista in base ai parametri url. Quindi, a tuo avviso, imposti il ​​queryset corretto in questo modo: edit_form.fields ["asset"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek,

E se non avessi un modello, lo sto solo facendo values_list('something', flat=True)?
Boris

2

Il commento di @ radtek dovrebbe essere una risposta in quanto è utile in scenari simili ma con un approccio diverso rispetto alla risposta accettata.

Se il tuo queryset cambia con l'URL nella tua vista.

Sto estendendo la risposta con l'esempio che ho usato:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.