Django - 在模板中提供其他信息

时间:2010-03-22 21:42:17

标签: python django django-templates django-views

我正在构建一个学习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知道这是否被认为是最好的方式。建议?

提前致谢。

Nf个

1 个答案:

答案 0 :(得分:3)

为了添加额外的信息,你应该使用带有'trough'字段的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))