Domyślnie utwórz pusty zestaw zapytań w polach formularza django

169

Mam te pola w postaci:

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

dzielnica pochodzi z kliknięcia na miasto, a obszar z kliknięcia na obszar. Z queryset=MyDistrict.objects.all()i queryset=MyArea.objects.all()forma będzie bardzo ciężka. Jak domyślnie ustawić zestawy zapytań jako puste?

TheNone
źródło
moja sugerowana zmiana poprawia post. Ogólnie żaden post nie powinien kończyć się słowem „dziękuję”. To nie jest osobiste, stary. meta.stackexchange.com/questions/17878/ ...
Telarian

Odpowiedzi:

422

Możesz mieć pusty zestaw zapytań, wykonując następujące czynności:

MyModel.objects.none()

Chociaż nie wiem, jak zamierzasz użyć tego formularza, możesz umieścić go jako zestaw zapytań swojego pola, aby uzyskać to, czego potrzebujesz ...

Więcej informacji znajdziesz tutaj

marianobianchi
źródło
4
W przypadku użycia, gdy zestaw zapytań zmienia się w widoku na podstawie parametrów adresu URL. Następnie w swoim widoku ustawiasz prawidłowy zestaw zapytań, taki jak: edit_form.fields ["asset"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek
A jeśli nie mam modelki, po prostu robię values_list('something', flat=True)?
Boris
2

@ radtek za komentarz powinien być odpowiedzią, ponieważ jest przydatna w podobnych sytuacjach, ale z innego podejścia niż akceptowanej odpowiedzi.

Jeśli zestaw zapytań zmienia się wraz z adresem URL w Twoim widoku.

Poszerzam odpowiedź na przykład jak użyłem:

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