在精确的 ManyToManyField 中检索记录

Retrieve a record in exact ManyToManyField

有一个模型 "User" 和 "Match",第二个模型用于始终连接 2 个用户。我正在尝试搜索具有两个特定用户的 "match"。

class User(models.Model):
    uuid = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, db_index=True)
    email = models.EmailField(_('email address'), blank=False, unique=True, db_index=True)

class Match(models.Model):
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True)
    users = models.ManyToManyField(User, related_name='matches')

最初的想法是用update_or_create,后来发现不行。所以我去了get_or_create,但现在我尝试了一个简单的过滤器。

我得到的最大值是重复匹配模型的值(得到2个相同值的结果)

测试 1

query = reduce(operator.or_, (Q(users__user__uuid=item) for item in LIST))
result = Match.objects.filter(query)

计数:0

测试 2

test = Match.objects.filter(users__user__in=LIST))

计数:0

测试 3

test = Match.objects.filter(users__in=LIST)

计数:2(重复)


列表 = 功能:

def list_uuid(user1, user2):
    return {str(user.uuid), str(user2.uuid)}

试试这个:

qs = Match.objects.filter(uuid__in=user1.matches.all(), users=user2)