说我是一个部落首领,俯瞰着部落活动。我有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的ForiegnKey
是User
,而不是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])
或者,您可能只是让
Mission
对ForiegnKey
具有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/