Istanza di Django ModelForm con queryset personalizzato per un campo specifico
-
10-07-2019 - |
Domanda
Ho un modello non dissimile dal seguente:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Tutti gli utenti possono lavorare in diverse fabbriche e pertanto i loro profili utente hanno tutti un ManyToManyField
su Factory
.
Ora voglio costruire un ModelForm
per Bike
ma voglio che l'elenco made_at
sia composto solo da fabbriche in cui l'utente corrente lavora . L'idea è che gli utenti dovrebbero essere in grado di aggiungere le bici che hanno assemblato e inserire in quali fabbriche è stata costruita la bici.
Come posso farlo?
Soluzione
La tua domanda potrebbe essere un duplicato di questo .
S. La risposta di Lott c'è il biglietto per risolvere il tuo problema. Ha risposto:
ForeignKey è rappresentato da django.forms.ModelChoiceField, che è un ChoiceField le cui scelte sono un QuerySet modello. Vedere il riferimento per ModelChoiceField.
Quindi, fornire un QuerySet all'attributo queryset del campo. Dipende da come viene costruito il modulo. Se crei un modulo esplicito, avrai campi chiamati direttamente.
form.rate.queryset = Rate.objects.filter (company_id = the_company.id)
Se si utilizza l'oggetto ModelForm predefinito,form.fields [" rate "]. Queryset = ...
Questo viene fatto esplicitamente nella vista. Nessun hack in giro.
Altri suggerimenti
prova qualcosa del genere nella vista
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
modifica il queryset Factory in modo che identifichi la factory in cui lavora l'utente.
Al giorno d'oggi, dovresti usare:
form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
'alumno',
'alumno__estudiante',
'alumno__estudiante__profile',
'item'
)