Django:从所有用户中排除用户列表

Django: exclude User list from all Users

我今天问了一个类似的问题(),解决方案是写一个对称查询。由于我更改了具有多对多关系的模型,因此此解决方案不再有效。

如何从用户实例中排除用户列表?使用此方法:

class Shift(models.Model):
    shift_location = models.CharField(max_length=200)
    users = models.ManyToManyField(User)

    def get_shift_users(self):
        return self.users.all()

    def get_other_users(self):
        return User.objects.all().exclude(self.users.all())

我收到错误:AttributeError:'User' 对象没有属性 'split'

可能是这样的:

User.objects.all().exclude(id__in=[u.id for u in self.users.all()])

您需要使用 in 运算符:

User.objects.exclude(id__in=self.users.all())

通过使用未计算的查询集 (self.users.all()),它在子查询中被转换,因此结果将在单个查询中获取。