formularios - Instancia de Django ModelForm con queryset personalizado para un campo específico
post django (3)
Tengo un modelo que no se parece al siguiente:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Todos los usuarios pueden trabajar en una serie de fábricas y, por lo tanto, sus perfiles de usuario tienen un ManyToManyField
to Factory
.
Ahora quiero construir un ModelForm
para Bike
pero quiero que la lista made_at
conste solo de fábricas en las que trabaja el usuario actual. La idea es que los usuarios deberían poder agregar las bicicletas que han ensamblado e ingresar en cuál de las fábricas se fabricaron.
¿Cómo puedo hacer eso?
Ahora, deberías usar:
form.base_fields[''alumno_item''].queryset = AlumnoItem.objects.prefetch_related(
''alumno'',
''alumno__estudiante'',
''alumno__estudiante__profile'',
''item''
)
Tu pregunta podría ser un engaño de esto .
La answer S. Lott es el boleto para resolver su problema. Él respondió:
ForeignKey está representada por django.forms.ModelChoiceField, que es un ChoiceField cuyas opciones son un QuerySet modelo. Vea la referencia para ModelChoiceField.
Por lo tanto, proporcione un QuerySet al atributo queryset del campo. Depende de cómo se construye tu formulario. Si creas un formulario explícito, tendrás campos nombrados directamente.
form.rate.queryset = Rate.objects.filter(company_id=the_company.id)
Si toma el objeto ModelForm predeterminado,form.fields["rate"].queryset = ...
Esto se hace explícitamente en la vista. No hackear alrededor.
prueba algo como esto en la vista
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
modifique el queryset Factory para que identifique la fábrica en la que trabaja el usuario.