0

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

我有以下型号...

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(即目标)中引用的 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”

有人可以帮助我理解我在误解什么。谢谢。

4

1 回答 1

0

你有一些误解。

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

No.o.targetID为您提供通过 ForeignKey 相关的实际 Target 对象。这就是为什么你不应该调用任何字段的原因:它应该被调用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
于 2013-09-18T08:16:24.197 回答