Criar conjunto de consultas vazio por padrão nos campos de formulário do django

169

Eu tenho esses campos no formulário:

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

distrito provém do clique na cidade e a área provém do clique na área. Com queryset=MyDistrict.objects.all()equeryset=MyArea.objects.all() forma será muito pesado. Como posso tornar os conjuntos de consultas vazios por padrão?

Então um
fonte
minha edição sugerida melhora a postagem. Em geral, nenhuma postagem deve terminar com "obrigado". Não é pessoal, amigo. meta.stackexchange.com/questions/17878/…
Telarian 26/03/19

Respostas:

422

Você pode ter um conjunto de consultas vazio fazendo o seguinte:

MyModel.objects.none()

Embora eu não saiba como você vai usar esse formulário, você pode colocá-lo como o conjunto de consultas do seu campo para obter o que você precisa ...

Você pode encontrar mais informações aqui

marianobianchi
fonte
4
No caso de uso em que seu conjunto de consultas é alterado na sua exibição com base nos parâmetros de URL. Então, na sua opinião você definir o queryset correto assim:. Edit_form.fields [ "activo"] queryset = Asset.objects.filter (location_id = location_id)
radtek
E se eu não tenho um modelo, estou apenas fazendo um values_list('something', flat=True)?
Boris
2

O comentário do @ radtek deve ser uma resposta, pois é útil em cenários semelhantes, mas com uma abordagem diferente da resposta aceita.

Se o seu conjunto de consultas mudar com o URL na sua exibição.

Estou estendendo a resposta com o exemplo que usei:

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