class Barrack(models.Model):
"""
... many other fields ...
"""
def how_many_helmets_for_this_user(self, user):
helmets = self.helmet_set.filter(possessors__contains=user) # how do we do this?
return helmets.count()
class Helmet(models.Model):
barrack = models.ForeignKey(Barrack)
possessors = models.ManyToManyField(User)
上面的代码不起作用。 __contains
过滤器仅适用于字符串。但是,我想过滤user
中helmet.possessors
所在的所有头盔。
我想知道是否可以这样做只使用Django的管理员功能。
我已经有一个糟糕且极其低效的解决方案,它不使用Django的经理:
def how_many_helmets(self, user):
result = 0
helmets = self.helmet_set.all()
for helmet in helmets:
if helmet.is_user_in_possessors(user):
result += 1
return result
# in Helmet class
def is_user_in_possessors(self, user):
for possessor in self.possessors.all():
if possessor == user:
return True
return False