Instance Django ModelForm avec un ensemble de requêtes personnalisé pour un champ spécifique
-
10-07-2019 - |
Question
J'ai un modèle semblable au suivant:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Tous les utilisateurs peuvent travailler dans plusieurs usines. Par conséquent, leurs profils d'utilisateurs ont tous un ManyToManyField
à Factory
.
Je souhaite maintenant construire un ModelForm
pour Bike
, mais je souhaite que la liste made_at
ne contienne que des fabriques dans lesquelles l'utilisateur actuel travaille. . L’idée est que les utilisateurs puissent ajouter des vélos assemblés et entrer dans l’une des usines où ce vélo a été fabriqué.
Comment je fais ça?
La solution
Votre question pourrait être une dupe de cette .
S. réponse il y a le ticket pour résoudre votre problème. Il a répondu:
ForeignKey est représenté par django.forms.ModelChoiceField, qui est un ChoiceField dont les choix sont un modèle QuerySet. Voir la référence de ModelChoiceField.
Donc, fournissez un QuerySet à l'attribut queryset du champ. Cela dépend de la façon dont votre formulaire est construit. Si vous créez un formulaire explicite, vous aurez des champs nommés directement.
form.rate.queryset = Rate.objects.filter (id_entreprise = the_company.id)
Si vous utilisez l'objet ModelForm par défaut,form.fields ["quot"]. Queryset = ...
Ceci est fait explicitement dans la vue. Pas de piratage.
Autres conseils
essayez quelque chose comme ça dans la vue
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
modifiez le jeu de requête Usine afin qu'il identifie la fabrique dans laquelle l'utilisateur travaille.
De nos jours, vous devriez utiliser:
form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
'alumno',
'alumno__estudiante',
'alumno__estudiante__profile',
'item'
)