使用来自_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>]
所以团有ForiegnKey
到User
,而不是Hunter
。因此,当您期待用户列表时,您正在传入Hunter
实例。
您可以更改模型,以便在Hunter
模型中有ForiegnKey
到User
。
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在评论中指出。
对不起,这里的问题实际上是错误的,虐待编辑它 – theptrk
我更新了答案,以反映当前的问题。 –
@TimEdgar如果您可以在查找user_id__in = [myhunter.user.id for myhunter in myhunters]中使用用户标识符以使查找成本更低,那将会很不错。 –
'Hunter'模型中有'user'字段吗? –