instância Django ModelForm com queryset personalizado para um campo específico
-
10-07-2019 - |
Pergunta
Eu tenho um modelo não muito diferente do seguinte:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Todos os usuários podem trabalhar em um número de fábricas e, portanto, seus perfis de usuário todos têm uma ManyToManyField
para Factory
.
Agora eu quero construir uma ModelForm
para Bike
mas eu quero a lista made_at
consistir em apenas fábricas em que o usuário atual funciona. A idéia é que os usuários devem ser capazes de adicionar bicicletas que eles já montados e entre qual das fábricas a moto foi feita na.
Como posso fazer isso?
Solução
Você pergunta pode ser um dupe desta .
S. Lott 's resposta não é o bilhete para resolver seu problema. Ele respondeu:
ForeignKey é representado por django.forms.ModelChoiceField, que é um ChoiceField cujas escolhas são um modelo QuerySet. Consulte a referência para ModelChoiceField.
Assim, fornecer um QuerySet para atributo queryset do campo. Depende de como o formulário é construído. Se você construir uma forma explícita, você terá campos chamado diretamente.
form.rate.queryset = Rate.objects.filter(company_id=the_company.id)
Se você pegar o objeto ModelForm padrão,form.fields["rate"].queryset = ...
Isto é feito explicitamente na vista. Sem cortar ao redor.
Outras dicas
Tente algo parecido com isto na vista ??p>
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
modificar a fábrica Queryset para que ele identifica a fábrica que o usuário trabalha.
Nowaday, você deve usar:
form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
'alumno',
'alumno__estudiante',
'alumno__estudiante__profile',
'item'
)