Django多对多过滤器



我在用户模型中有多对多的字段,其中一个用户可以有多个角色,例如管理员,病人,医生和其他人。现在我想查询数据,以获得用户与管理员和所有其他角色,而不是医生和病人的角色。我正在使用这个

User.objects.exclude(roles__code_name__in=['pt', 'doc'])

现在我的一个用户也注册为病人,所以他有管理员和病人的角色,现在我无法通过使用上面的查询得到他。所以得出结论…如果用户有两个角色如果其中一个是耐心,他也有其他角色,我也想要他。我该怎么办?提前感谢

更新
class User(AbstractBaseUser):
username                = models.CharField(max_length=30, unique=True)
email                   = models.EmailField(max_length=60, blank=True, null=True)
first_name              = models.CharField(max_length=30)
last_name               = models.CharField(max_length=30)
cnic                    = models.CharField(max_length=13, unique=True)
mobile                  = models.CharField(max_length=11, unique=True)
dob                     = models.DateField(blank=True, null=True)
full_name               = models.CharField(max_length=90, blank=True, null=True)
profile_image           = models.ImageField(max_length=255, upload_to=get_profile_image_path, null=True, blank=True, default=get_default_profile_image_path)
next_of_kin_name        = models.CharField(max_length=60, blank=True, null=True)
next_of_kin_mobile      = models.CharField(max_length=11, blank=True, null=True)
is_delete               = models.BooleanField(default=False)
status                  = models.IntegerField(default=0)
contact                 = models.CharField(max_length=10, blank=True, null=True)
hospital                = models.ForeignKey('Hospital', on_delete=models.SET_NULL, blank=True, null=True)
roles                   = models.ManyToManyField('Role', related_name='users')
is_staff                = models.BooleanField(default=False)
balance                 = models.PositiveIntegerField(default=0)
gender                  = models.CharField(max_length=10, choices=gender_choices, default=gender_choices[0][0])
phone_verified          = models.BooleanField(default=False)
created_at              = models.DateTimeField(auto_now_add=True)
created_by              = models.ForeignKey('self', related_name='+', blank=True, null=True, on_delete=models.CASCADE)
updated_at              = models.DateTimeField(auto_now=True)
updated_by              = models.ForeignKey('self', related_name='+', blank=True, null=True, on_delete=models.CASCADE)

这是我的模型,它的角色是多对多的领域。我有多个角色,如医生,病人,管理员和许多其他自定义创建的角色与自定义权限。我有一个视图,我想获得用户的数据,而不是病人或医生。一切都很好,直到我的一个管理员用户决定注册为病人,所以他现在有病人和管理员角色,现在我无法通过使用上面提到的查询

得到他

找到了。这个解决方案对我来说很好,如果它是目前工作的理想方法。由于@all

User.objects.annotate(num_roles=Count('roles')).exclude(Q(id=self.request.user.id) | Q(is_delete=True) | Q(roles__code_name__in=['pt', 'doc', 'su']) & Q(num_roles=1)).order_by('-id')

相关内容

  • 没有找到相关文章

最新更新