web-dev-qa-db-fra.com

Créer un ensemble de requêtes vide par défaut dans les champs de formulaire Django

J'ai ces champs sous forme:

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

district vient de cliquer sur la ville et la région vient de cliquer sur la région. Avec queryset=MyDistrict.objects.all() et queryset=MyArea.objects.all() le formulaire sera très lourd. Comment puis-je rendre les jeux de requêtes vides par défaut?

Merci d'avance

123
TheNone

Vous pouvez avoir un queryset vide en faisant ceci:

MyModel.objects.none()

Bien que je ne sache pas comment allez-vous utiliser ce formulaire, vous pouvez le définir comme groupe de requêtes de votre champ afin d'obtenir ce dont vous avez besoin ...

Vous pouvez trouver plus d'informations ici

314
marianobianchi

@ radtek's comment devrait être une réponse car il est utile dans des scénarios similaires, mais avec une approche différente de la réponse acceptée.

Si votre requête change avec l'URL dans votre vue.

Je prolonge la réponse avec l'exemple que j'ai utilisé:

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