我查看了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)
为目标模型中的所有ManyToMany关系定义了等等。
现在,我从另一个模型中引用了目标模型本身,如下所示。
class Schedule(models.Model):
targetID = models.ForeignKey(Target, null=True)
name = models.CharField(null=True)
在我的Schedule模型模板中,我希望能够显示ForeignKey中引用的ManyToManyFields的值(即Target)。
当我写下以下内容时,
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”
有人可以帮助我理解我误解了什么。感谢。
答案 0 :(得分:0)
你有一些误解。
o.targetID --->这给了我ForeignKey字段的ID
没有。 o.targetID
为您提供与您的ForeignKey相关的实际目标对象。这就是为什么你不应该调用字段anyID:它应该被称为target
。
现在,这是可能的,因为这是FK关系的多对一方面:即,对于每个计划,只有一个目标。但是从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