modelchoicefield formularios form createview avanzados django django-forms modelform

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.