Django – укажите дополнительную информацию в шаблоне
-
21-09-2019 - |
Вопрос
Я создаю приложение для изучения Django и начал с системы контактов, которая в настоящее время хранит контакты и адреса.C - это отношения многие-ко-многим с A, но вместо использования 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, чтобы знать, считается ли это лучшим способом сделать это.Предложения?
Заранее спасибо.
Нф
Решение
Чтобы добавить дополнительную информацию, вам следует использовать связь 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))