说我是一个部落首领,俯瞰着部落活动。我有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(通过URL传递的tribepk)

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>]

最佳答案

因此,Mission的ForiegnKeyUser,而不是Hunter。因此,当它需要用户列表时,您要传递Hunter实例。

您可以更改模型,以便在ForiegnKey模型中将User更改为Hunter

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

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


或者,您可能只是让MissionForiegnKey具有Hunter

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

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


编辑:更新在第一个选项上的查找要便宜一些,因为Aamir Adnan在评论中指出。

关于python - 使用_set.all()中的set并使用__in过滤该set,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19443583/

10-13 02:28