Mostrar uma Foreign Key e atributos relacionados como Radio Button

494 views
Skip to first unread message

Gabriel Abdalla Cavalcante Silva

unread,
Apr 21, 2010, 1:45:49 PM4/21/10
to django...@googlegroups.com
Boa Tarde Pessoal,

Estou com uma dúvida que seria a seguinte:

Tenho os modelos aluno, curso e matricula, sendo que matricula possui
respectivamente aluno(fk- aluno), curso(fk - curso).

Utilizei um inlineformset_factory para permitir que o usuário preencha
os campos de inscrição e já escolha o curso que deseja da seguinte
maneira

MatriculaFormSetFactory = inlineformset_factory(
Aluno, Matricula,
can_delete=False,extra=1,fields=('curso',))

Com isso tenho os campos de Aluno no formulário e ainda um campo do
tipo 'select' com os nomes do cursos (que é a FK de curso dentro de
Matricula). A dúvida:


Teria como utilizar Radio Buttons ao invés do select para mostrar os
cursos disponíveis? (Pelo que li as FK's são sempre mostradas como
selects no Django).


Caso seja possível, de que forma posso resgatar o restante dos
atributos de curso, como carga_horaria, vagas e outros? Dentro do meu
template consigo 'puxar' os cursos da seguinte forma:

<div>
{{ matricula_formset.management_form }}
{% for matricula_form in matricula_formset.forms %}
{{ matricula_form.id }}
<div> {{ matricula_form.curso.label }}</div>
<div> {{ matricula_form.curso }}</div>
{% endfor %}
</div>

Mas:

1) nesse caso puxa um select;
2) tentar chamar {{ matricula_form.curso__vagas}} por exemplo não
retornada nada :'(


Desde já agradeço a atenção de todos.

[]'

Gabriel Cavalcante

--
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/>

Subscription settings: http://groups.google.com/group/django-brasil/subscribe?hl=pt-BR

Gileno Alves

unread,
Apr 22, 2010, 2:21:28 PM4/22/10
to django...@googlegroups.com
Utilizando formset eu teria que estudar para saber como fazer, mas algo que já fiz foi criando um CustomForm que tinha apenas um Field[1], algo assim: http://pastebin.com/ekgV2KnK
Espero que ajude em algo

[1] - http://docs.djangoproject.com/en/1.1/ref/forms/fields/#django.forms.ModelChoiceField

2010/4/21 Gabriel Abdalla Cavalcante Silva <gabriel.ca...@gmail.com>



--
Abraços
Gileno Filho

Gabriel Abdalla Cavalcante Silva

unread,
Apr 23, 2010, 12:42:27 PM4/23/10
to django...@googlegroups.com
Bem,

Seguindo sua dica e dando uma olhada nas classes do django consegui
mostrar a Foreign Key como Radio button da seguinte forma:

class Inscricao_Matricula(forms.ModelForm):
curso = forms.ModelChoiceField(queryset=Curso.objects.all(),
empty_label="Nenhum Curso", widget=forms.RadioSelect())
class Meta:
model=Matricula
fields=('curso',)

CursoFormSetFactory = inlineformset_factory(
Aluno, Matricula,
can_delete=False,extra=1,form=Inscricao_Matricula)

onde este atributo 'form' me salvou :D.

A questão agora se resume no meu segundo problema: Como chamar objetos
da classe Curso como a carga_horaria e o número de vagas?

Se eu chamo {{ matricula_form.curso }} no template aparecem os cursos.
Tentei {{ matricula_form.curso__vagas }} mas não mostra nada no
template.

Alguém faz idéia de como é possível fazer essa chamada?

[]'s

Gabriel Cavalcante

PS:Obrigado mesmo Gileno, sua ajuda foi crucial para o primeiro problema!

Gileno Alves

unread,
Apr 23, 2010, 12:54:30 PM4/23/10
to django...@googlegroups.com
Tenta definir o método __unicode__(self), no modelo Curso, retornando uma string com a sua definição do que deve ser exibido.
Assim o label do radio button ficará com as informações que você deseja e você não precisará chamar algo assim: {{ matricula_form.curso__vagas }}

2010/4/23 Gabriel Abdalla Cavalcante Silva <gabriel.ca...@gmail.com>

Sara Fernandes

unread,
May 17, 2016, 5:38:38 PM5/17/16
to Django Brasil

Olá arthas_dk - Gabriel Cavalcante, boa tarde!!
Atualmente estou com um projeto e com uma ideia parecida com a sua em relação ao Foreign Key, eu não consigo ter acesso aos atributos desse  Foreign Key, vc disse que usou o inlineformset_factory, mas como vc fez ?

A questão é que criei um objeto do tipo de uma classe (chamado "agressor"), ele é um ForeignKey
e eu não consigo de jeito nenhum acessar os atributos desse objeto pelo form. Já venho tentando resolver isso, mas não obtive sucesso, gostaria da sua ajuda questão:
ex:
No models.py
class ForensicLife(ForensicPessoa,ForensicModusOperandi):
"""
Classe para modelagem de Crimes contra a vida
"""

agressor = models.ForeignKey(ForensicAgressor, on_delete=models.CASCADE)


No form.html

<div class="col-xs-6">
<label>
{{ life_form.agressor.name.label }}
</label>
{{ life_form.agressor.name }}
</div> 
Reply all
Reply to author
Forward
0 new messages