Django ModelForm instance with custom queryset for a specific field Django ModelForm instance with custom queryset for a specific field django django

Django ModelForm instance with custom queryset for a specific field


try something like this in the view

form  = BikeForm()form.fields["made_at"].queryset = Factory.objects.filter(user__factory)

modify the Factory queryset so that it identifies the factory which the user works at.


You question might be a dupe of this.

S. Lott's answer there is the ticket to solve your problem.He answered:

ForeignKey is represented by django.forms.ModelChoiceField, which is a ChoiceField whose choices are a model QuerySet. See the reference for ModelChoiceField.

So, provide a QuerySet to the field's queryset attribute. Depends on how your form is built. If you build an explicit form, you'll have fields named directly.

form.rate.queryset = Rate.objects.filter(company_id=the_company.id) If you take the default ModelForm object, form.fields["rate"].queryset = ...

This is done explicitly in the view. No hacking around.


Nowaday, you should use:

    form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(        'alumno',        'alumno__estudiante',        'alumno__estudiante__profile',        'item'    )