Django - Forneça informações adicionais em modelo
-
21-09-2019 - |
Pergunta
Estou construindo um aplicativo para aprender o Django e comecei com um sistema de contato que atualmente armazena contatos e endereços. C são muitos para muitos relacionamentos com A, mas em vez de usar o Django's models.ManyToManyField()
Eu criei minha própria mesa de link, fornecendo informações adicionais sobre o link, como qual é o tipo de endereço para esse contato (casa, trabalho etc.). O que estou tentando fazer é transmitir essas informações para uma visão, então, na minha visão completa de um contato, posso fazer isso:
def contact_view_full(request, contact_id):
c = get_object_or_404(Contact, id=contact_id)
a = []
links = ContactAddressLink.objects.filter(ContactID=c.id)
for link in links:
b = Address.objects.get(id=link.AddressID_id)
a.append(b)
return render_to_response('contact_full.html', {'contact_item': c, 'addresses' : a }, context_instance=RequestContext(request))
E assim eu posso fazer o equivalente a c.Addresses.all()
ou, no entanto, o ManyTomanyfield funciona. O que estou interessado em saber é como posso desmaiar informações sobre o link no link
objeto com o 'addresses' : a
informações, para que quando meu modelo faça isso:
{% for address in addresses %}
<!-- ... -->
{% endfor %}
e associar adequadamente os dados do objeto de link correto ao endereço.
Então, qual é a melhor maneira de conseguir isso? Estou pensando que uma união de dois objetos pode ser uma ideia, mas não tenho experiência suficiente com o Django para saber se isso é considerado a melhor maneira de fazê -lo. Sugestões?
Desde já, obrigado.
Nf
Solução
Para adicionar informações extras, você deve usar um relacionamento de tomana com um campo extra 'calha':http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relations
Isso levará a este código:
def contact_view_full(request, contact_id):
c = get_object_or_404(Contact, id=contact_id)
a = c.addresses.all()
return render_to_response('contact_full.html', {'contact_item': c, 'addresses' : a }, context_instance=RequestContext(request))