在我的应用程序中,有用户,用户可以互相阻止.我想保存用户执行的每个操作.在一个动作中,一个用户可以对其他用户执行多个禁止操作.这就是操作表具有USER_LIST的原因.现在我想找出其他用户针对特定用户的总数.例如,User_5被其他用户攻击了8次.
models.py
class BanMode(models.Model):
ban_mode = models.CharField(max_length=10, blank=False, null=False)
class CustomUser(models.Model):
custom_name = models.CharField(max_length=96, blank=False, null=False)
custom_id = models.IntegerField(blank=False, null=False)
class Action(models.Model):
taken_by = models.ForeignKey(CustomUser, on_delete=models.CASCADE, blank=False, null=False)
ban_mode = models.ForeignKey(BanMode, on_delete=models.PROTECT, blank=False, null=False)
user_list = models.ManyToManyField(CustomUser, blank=False, null=False, related_name="user_list")
下面的代码successfully找出其他用户(不是唯一的用户)对该用户执行的操作总数.
CustomUser.objects.annotate(banned_by_count=Count('user_list', distinct=False))
但是,我想应用一个过滤器.我想知道其他用户(不是唯一用户)对该用户执行的操作总数(例如BAN_MODE为1的操作).此查询不起作用.
CustomUser.objects.annotate(banned_by_count=Count('user_list', distinct=False, filter=Q(action__ban_mode__ban_mode="BAN")))