1

说我是部落首领,俯瞰部落活动。我有 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>]
4

1 回答 1

4

所以 Mission 有ForiegnKeytoUser和 not HunterHunter因此,当它期望用户列表时,您正在传递实例。

您可以更改模型,以便在模型中有一个ForiegnKeyto 。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有一个ForiegnKeyto Hunter

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

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

编辑:正如 Aamir Adnan 在评论中指出的那样,更新第一个选项的查找成本更低。

于 2013-10-18T07:36:55.547 回答