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


169

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

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


ma modification suggérée améliore le message. En général, aucun message ne doit se terminer par "merci". Ce n'est pas personnel, mon pote. meta.stackexchange.com/questions/17878/…
Telarian

Réponses:


422

Vous pouvez avoir un jeu de requêtes vide en procédant comme suit:

MyModel.objects.none()

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

Vous pouvez trouver plus d'informations ici


4
Dans le cas d'utilisation où votre ensemble de requêtes change dans votre vue en fonction des paramètres d'URL. Ensuite, dans votre vue, vous définissez le jeu de requêtes correct comme suit: edit_form.fields ["asset"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek

Et si je n'ai pas de modèle, je fais juste un values_list('something', flat=True)?
Boris

2

Le commentaire de @ radtek 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 jeu de requêtes change avec l'URL dans votre vue.

J'étend la réponse avec l'exemple comme je l'ai utilisé:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.