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

Foi útil?

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