Django form alanlarında varsayılan olarak boş sorgu kümesi oluşturma


169

Formda bu alanlar var:

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çe şehir tıklaması ile gelir ve alan tıklama alanı ile gelir. İle queryset=MyDistrict.objects.all()ve queryset=MyArea.objects.all()formu çok ağır olacaktır. Queryset'leri varsayılan olarak nasıl boş yapabilirim?


önerdiğim düzenleme yayını geliştirir. Genel olarak, hiçbir gönderi "teşekkürler" ile bitmemelidir. Kişisel değil dostum. meta.stackexchange.com/questions/17878/…
Telarian

Yanıtlar:


422

Bunu yaparak boş bir sorgu kümeniz olabilir:

MyModel.objects.none()

Bu formu nasıl kullanacağınızı bilmesem de, ihtiyacınız olanı elde etmek için bunu alanınızın queryset'i olarak koyabilirsiniz ...

Daha fazla bilgiyi burada bulabilirsiniz


4
Sorgu kümenizin url parametrelerine göre görünümünüzde değiştiği kullanım durumunda. Ardından, görünümünüzde doğru sorgu kümesini şöyle ayarlayın: edit_form.fields ["asset"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek

Bir modelim yoksa, sadece bir yapıyorum values_list('something', flat=True)?
Boris

2

@ radtek'in yorumu , benzer senaryolarda yararlı olduğu için ancak kabul edilen yanıttan farklı bir yaklaşımla bir cevap olmalıdır.

Sorgu kümeniz görünümünüzdeki URL ile değişirse.

Kullandığım örnekle cevabı genişletiyorum:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.