使用_set.all()中的set并使用集合过滤__in

时间:2013-10-18 07:05:27

标签: python django django-queryset

说我是部落首领俯视部落活动。我有3个型号:

class Hunter:
   tribes = models.ManyToManyField(Tribe)
   info

class Missions:
    user = models.ForeignKey(User)
    info

class Tribe:
    tribe_chief = models.ForeignKey(User) #directed towards Chief
    info

作为我的主管 views.py(tribepk通过URL传递)

user = request.user
tribe_instance = Tribe.objects.get(pk=tribepk)
myhunters = tribe_instance.hunter_set.all()
allmissions = Mission.objects.filter(user__in=myhunters)

所以除了分配外,所有东西都会填充。是否可以将_set.all()结果用作过滤条件?感谢

如果有帮助,这就是myhunters中返回的内容 - >

'myhunters': [<Hunter: test>, <Hunter: asdf>, <Hunter: more>]

1 个答案:

答案 0 :(得分:3)

所以Mission有一个ForiegnKeyUser而不是Hunter。因此,当您期待用户列表时,您将传递Hunter个实例。

您可以更改模型,以便在ForiegnKey模型中拥有UserHunter

class Hunter:
   tribes = models.ManyToManyField(Tribe)
   user = models.ForiegnKey(User)

allmissions = Mission.objects.filter(user__id__in=[myhunter.user.id for myhunter in myhunters])

或者您可以让Mission拥有ForiegnKeyHunter

class Missions:
    user = models.ForeignKey(Hunter)
    info

allmissions = Mission.objects.filter(user__in=myhunters)

编辑:正如Aamir Adnan在评论中指出的那样,将第一个选项的查询更新为更便宜。