【问题标题】:Getting and displaying related objects in Django在 Django 中获取和显示相关对象
【发布时间】:2013-10-20 23:05:06
【问题描述】:

我知道这很简单,但我不知道如何将一些模型连接在一起以显示在我的 Django 模板中。我有可以有多个“联系人”的“组”。

到目前为止,我得到了:

class Group(models.Model):
    group_name = models.CharField()

class Contact(models.Model):
    contact_name = models.ForeignKey(Group)

在我看来,起初我认为简单地获取我的群组也会获得任何附加的联系人,但这似乎并没有按预期发生:

def get_queryset(self):
    groups = Group.objects.all()
    return groups

我希望在我的模板中做这样的事情:

{% for group in groups %}
    <h2>{{ group.group_name }}</h2>
    {% for c in group.contact %}
        <h3>{{ c.contact_name }}</h3>
    {% endfor %}
{% endfor %}

这不起作用 - 我做错了什么?在我看来,确保检索到每个组的联系人的正确查询是什么?

【问题讨论】:

  • {% for c in group.contact_set.all %}
  • 如文档的这一部分所述:docs.djangoproject.com/en/1.5/ref/models/relations
  • 感谢Burhan,我在阅读文档的方式上,我认为.contact_set 方法是在视图中使用的,我什至没有想过在模板中使用它。赞赏:)

标签: python django django-models


【解决方案1】:

嗯,看起来您的一些代码来自不同的地方,所以为了让您能够完全理解,您可以通过 2 种不同的 方式来做到这一点:

1) 要访问任何类型的相关对象,作为一个简单的ForeignKeyManyToMany,您只需从相反的模型开始并使用 _set,如下例所示:

class Group(models.Model):
    group_name = models.CharField()

class Contact(models.Model):
    contact_name = models.ForeignKey(Group)

{{ group.contact_set.all }}

2) 您可以设置一个不同于默认_set 的名称,更改Contact,如下所示:

class Contact(models.Model):
    contact_name = models.ForeignKey(Group, related_name='contacts')

所以,related_name kwarg 为您设置一个新名称,而不是 _set 一个:

{{ group.contacts.all }}

我希望我能够更清楚地了解对模型相关对象的简单访问。

【讨论】:

  • 太棒了,谢谢!我已经阅读了“_set”方法,但没有意识到它是在模板中使用的。在我开始查看模板之前,我认为我必须在视图中使用它......!感谢您的精彩回答。
  • 是的,您可以在任何地方使用它来访问相关对象。没问题,我很高兴能帮上忙。 :)
  • 您好,我知道您已经很久没有回答这个问题了。我还是 django 的新手,我面临着同样的问题,我在我的 models.py 中尝试了解决方案 1,但我不断收到 'ForeignKey' object has no attribute contact_set
  • 看起来你已经在调用你的外键对象了。你能在这里分享你的代码吗?否则,尝试将contact_set 更改为all()
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 2023-03-03
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多