Limitar o Relacionamento.

20 views
Skip to first unread message

Artur

unread,
May 29, 2012, 11:09:12 AM5/29/12
to django...@googlegroups.com
Mais uma dúvida noob creio eu, mas que não encontrei resposta em lugar nenhum.

Por exemplo, eu tenho um model, tipo encomenda.

Class encomenda(models.Model):
    tipo=....
    foo=bar
    rota=models.ForeingKey(Rota)

só que eu gostaria que no meu model, ou formulário o que fosse, foram exibidas apenas as rotas que tivessem o seu campo ativo=True.
É possível fazer isso apenas nos models de maneira simplificada ou eu teria que implementar isso manualmente?

Valeu!

Ernesto Guevara

unread,
May 29, 2012, 11:55:58 AM5/29/12
to django...@googlegroups.com
No form de encomenda vc pode alterar a queryset do campo rota para filtrar os ativos.

class EncomendaForm(ModelForm):
    rota = forms.ModelChoiceField(queryset=Rota.objects.filter(ativo=True))

    class Meta:
        model = Encomenda

Abraço!

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Artur

unread,
May 29, 2012, 1:11:28 PM5/29/12
to django...@googlegroups.com
Entendi, mas seria possível fazer isso no Admin também?

Muito obrigado.


Em terça-feira, 29 de maio de 2012 12h55min58s UTC-3, Guevara escreveu:
No form de encomenda vc pode alterar a queryset do campo rota para filtrar os ativos.

class EncomendaForm(ModelForm):
    rota = forms.ModelChoiceField(queryset=Rota.objects.filter(ativo=True))

    class Meta:
        model = Encomenda

Abraço!

Ernesto Guevara

unread,
May 29, 2012, 1:29:23 PM5/29/12
to django...@googlegroups.com
Não manjo muito de admin não, mas esse form vc pode usar tb lá:

class EncomendaAdmin(admin.ModelAdmin):
     form = EncomendaForm()

Gileno Alves

unread,
May 29, 2012, 8:25:33 PM5/29/12
to django...@googlegroups.com
Só complementando a dica do Ernesto.

ao invés de declarar novamente o o field no Form, é melhor fazer assim:

class EncomendaForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(EncomendaForm, self).__init__(*args, **kwargs)
        self.fields["rota"].queryset = Rota.objects.filter(ativo=True)

    class Meta:
        model = Encomenda

Dessa forma você evita repetir as informações que já foram definidas na declaração do Field no Model

2012/5/29 Ernesto Guevara <egueva...@gmail.com>

Artur

unread,
May 31, 2012, 2:26:26 PM5/31/12
to django...@googlegroups.com
Valeu galera, nem sei como agradecer a vocês. 
Reply all
Reply to author
Forward
0 new messages