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?

Foi útil?

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

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'
    )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top