Python Django:筛选多对多,查找存在多个连接模型实例的实例

Python Django:筛选多对多,查找存在多个连接模型实例的实例,python,django,Python,Django,我有下面的模型,其中一个线程可以有很多人。我想找到一个包含特定用户的线程(如果存在) class Thread(models.Model): subject = models.CharField(max_length=150) users = models.ManyToManyField(settings.AUTH_USER_MODEL, through="UserThread") class UserThread(models.Model): thread = m

我有下面的模型,其中一个线程可以有很多人。我想找到一个包含特定用户的线程(如果存在)

class Thread(models.Model):

    subject = models.CharField(max_length=150)
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, through="UserThread")

class UserThread(models.Model):

    thread = models.ForeignKey(Thread, on_delete=models.CASCADE)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

class Message(models.Model):

    thread = models.ForeignKey(Thread, related_name="messages", on_delete=models.CASCADE)

    sender = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="sent_messages", on_delete=models.CASCADE)
    sent_at = models.DateTimeField(default=timezone.now)
我想检查的是,是否有一个
线程
,它有以下两个用户(
user1
user2
):


thread=thread.objects.get(Q(UserThread\uu user==user1)&Q(UserThread\uu user==user2))

对于复杂的查询集,我建议您使用
过滤器
查询集而不是get,因为过滤器将返回零个或多个结果,但get必须只返回一个结果,如果您有多个条目,则可能需要处理
多个对象返回的
,如果找不到结果,则使用
DoesNotExist

Thread.objects.filter(Q(userthread__user=user1) & Q(userthread__user=user2)) 

注意:我使用了
userthread
而不是
userthread
,因为数据库中的表将按名称
userthread
创建,这将返回包含以下2个用户的所有线程:

 Thread.objects.filter(Q(userthread__user=user1), Q(userthread__user=user2))
如果您想检查是否有以下两个用户的线程,您可以使用


这不起作用,因为Django运行时不会出现错误:关键字参数重复。请检查更新的答案。。数据库中不会有任何名为UserThread的表,因为当您仅以小写形式运行迁移表名存储时,若要执行queryset,需要使用数据库中的表名
 Thread.objects.filter(Q(userthread__user=user1), Q(userthread__user=user2)).exists()