【问题标题】:How to display ManyToManyField field values from a ForeignKey in Django template ?如何在 Django 模板中显示 ForeignKey 中的 ManyToManyField 字段值?
【发布时间】:2013-09-22 11:03:57
【问题描述】:

我查看了 QuestSet API 并试图找到答案。但我想我误解了 Manager 和 instance 之间的区别。

我有以下型号...

class Target(model.Model):
   group = models.ManyToManyField(Group, null=True)
   group_name = models.ManyToManyField(GroupName, null=True)
   ...

class Group(models.Model):
   value = models.CharField(null=True)

为目标模型中的所有多对多关系定义等等。

现在,我从另一个模型中引用了目标模型本身,如下所示。

class Schedule(models.Model):
   targetID = models.ForeignKey(Target, null=True)
   name = models.CharField(null=True)

在我的 Schedule 模型模板中,我希望能够显示在 ForeignKey(即 Target)中引用的 ManyToManyFields 的值。

当我写下以下内容时,

o = Schedule.objects.get(name = 'O_123')
o.targetID --->  This gives me the ID of the ForeignKey field

我希望能够参考名称(即 O_123)显示目标模型中存在的所有字段的值,为此我尝试了以下方法,

o.targetID.group

这会显示“django.db.models.fields.related.ManyRelatedManager 对象在 0x1f2e850”

谁能帮我理解我在误解什么。谢谢。

【问题讨论】:

  • o.targetID.group 给你一个查询集。您需要执行o.targetID.group.all() 并循环遍历对象。 More here

标签: django django-models django-templates django-orm


【解决方案1】:

你有一些误解。

o.targetID ---> 这给了我 ForeignKey 字段的 ID

没有。 o.targetID 为您提供通过您的 ForeignKey 相关的实际目标对象。这就是为什么您不应该将该字段称为anyID:它应该被称为target

现在,这是可能的,因为这是 FK 关系的多对一:即,对于每个 Schedule,只有一个 Target。但是从 Target 到 Group 是多对多的关系。所以o.targetID.group 指的是许多 组(同样,命名约定有帮助:您可能应该将此字段称为groups)。

所以 Django 给了你一个 Manager 对象:基本上,就像你做 Schedule.objects 时一样。就像后一种情况一样,您可以使用all() 来获取所有元素进行迭代,或者使用get(criteria=value) 来获取特定元素,甚至可以使用filter(criteria=value) 来获取过滤后的查询集。

在你的情况下,你可能想要:

for group in o.targetID.group.all():
    print group.my_field_value

【讨论】:

  • 谢谢丹尼尔。我知道我没有正确理解某些东西。您能否告诉我如何处理以下问题。我有一个表单,其中我从我的模型中显示一个带有一些 ID 的复选框,在选择特定 ID 时,它会显示来自同一模型的其余字段。我想我必须使用 ajax 才能让表格显示在同一页面上。你有什么建议?
  • 是的,听起来您需要 Ajax。如果您有任何具体疑问,您应该提出一个新问题。
  • 好的..我会这样做..谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 2019-08-07
  • 2014-11-22
  • 2021-04-28
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多