使用来自_set.all()的设置并使用__in过滤设置

问题描述:

说我是一个俯瞰部落活动的部落酋长。我有3种型号:使用来自_set.all()的设置并使用__in过滤设置

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) 

所以一切都填充除了allmissions。是否可以使用_set.all()结果作为过滤条件?由于

如果有帮助,这就是在myhunters返回 - >

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

'Hunter'模型中有'user'字段吗? –

所以团有ForiegnKeyUser,而不是Hunter。因此,当您期待用户列表时,您正在传入Hunter实例。

您可以更改模型,以便在Hunter模型中有ForiegnKeyUser

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

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

或者您也可以有MissionForiegnKeyHunter

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

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

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

+0

对不起,这里的问题实际上是错误的,虐待编辑它 – theptrk

+0

我更新了答案,以反映当前的问题。 –

+0

@TimEdgar如果您可以在查找user_id__in = [myhunter.user.id for myhunter in myhunters]中使用用户标识符以使查找成本更低,那将会很不错。 –