Джанго - укажите дополнительную информацию в шаблоне - PullRequest
2 голосов
/ 23 марта 2010

Я создаю приложение для изучения Django и начал с системы контактов, которая в настоящее время хранит контакты и адреса. С многозначны по отношению к А, но вместо использования Django models.ManyToManyField() я создал свою собственную таблицу ссылок, предоставляющую дополнительную информацию о ссылке, такую ​​как тип адреса для этого контакта (дом, работа и т. Д.). ). То, что я пытаюсь сделать, это передать эту информацию в представление, поэтому в моем полном представлении контакта я могу сделать это:

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

И поэтому я могу сделать эквивалент c.Addresses.all() или, тем не менее, ManyToManyField работает. Мне интересно знать, как я могу передать информацию о ссылке в объекте link вместе с информацией 'addresses' : a, чтобы, когда мой шаблон делал это:

{% for address in addresses %}
<!-- ... -->
{% endfor %}

и правильно связать правильные данные объекта ссылки с адресом.

Так, каков наилучший способ достичь этого? Я думаю, что объединение двух объектов может быть идеей, но у меня недостаточно опыта с Django, чтобы понять, считается ли это лучшим способом сделать это. Предложения?

Заранее спасибо.

Nf

1 Ответ

3 голосов
/ 23 марта 2010

Чтобы добавить дополнительную информацию, вы должны использовать отношение ManyToMany с дополнительным полем «через»: http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

Это приведет к этому коду:

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))
...