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?

È stato utile?

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'
    )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top