我无法查询多对多关系中的项目列表。我试图查询的模型如下。这是一个模型,表明工人选择"开放"许多工人可以选择相同的"开放"。我正在尝试选择已选择"开放"但我没有成功。
class FavOpening(models.Model):
opening = models.OneToOneField(Openings, blank=True, default=None)
worker = models.ManyToManyField(Worker, blank=True, default=None)
def __unicode__(self):
return str(self.opening)
这很奇怪,因为我在下面尝试了基于所选工人(id-31)的打开类型并且它起作用,工人选择的开口将打印。
employee = get_object_or_404(Worker, id=31)
print employee.favopening_set.all()
但是,当我以相反的方式使用下面的方法让工作人员进入许多人时,它不起作用。说它没有属性" favopening_set"
openingobj = get_object_or_404(Openings, id=1)
print openingobj.favopening_set.all()
我还尝试按照以下内容获取基于开头的工作人员列表(id = 1),但我没有得到任何结果 - 显示Workers.Worker.None,这不是真的,因为我至少有一个工人选择了这个开场。(我在管理员处查看)
openingobj = get_object_or_404(Openings, id=1)
print openingobj.favopening.worker
最后,我根据一些研究说明了使用预取来获取一系列内容 - What's the difference between select_related and prefetch_related in Django ORM?,但是它说管理器无法通过开放实例访问。
openingobj = get_object_or_404(Openings, id=1)
openingobj.objects.prefetch_related('favopening_set').all()
答案 0 :(得分:4)
编辑回复以考虑评论中的反馈
因此,您希望获得已选择开口的所有工作人员的查询集。 代码如下有帮助吗?
openingobj = get_object_or_404(Openings, id=1)
workers_queryset = opening.favopening.worker.all()
我认为将“工人”重命名为“工人”可能是个好主意。