Instance Django ModelForm avec un ensemble de requêtes personnalisé pour un champ spécifique

StackOverflow https://stackoverflow.com/questions/1821289

  •  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?

Était-ce utile?

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'
    )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top