Django多对多查询显示空或不成功

8 浏览
0 Comments

Django多对多查询显示空或不成功

我在查询多对多关系中的项目列表时遇到问题。我尝试查询的模型如下。这是一个模型,将指示工人选择“开放”,许多工人可以选择相同的“开放”。我正在尝试选择选择了“开放”的工人列表,但我没有成功。

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

最后,我根据Django ORM中select_related和prefetch_related之间的区别是什么?的某些研究尝试了下面的内容,但它说无法通过开放实例访问管理器。

openingobj = get_object_or_404(Openings, id=1)
openingobj.objects.prefetch_related('favopening_set').all()

admin 更改状态以发布 2023年5月24日
0
0 Comments

根据评论反馈,编辑了回复

所以你想获取所有选择了职位的员工的查询集吗?下面的代码有帮助吗?

  openingobj = get_object_or_404(Openings, id=1)
  workers_queryset = opening.favopening.worker.all()

我认为将“worker”重命名为“worker”可能是个好主意。

0