gpt4 book ai didi

django - 如何查询多对多字段中仅描述的对象存在的位置

转载 作者:行者123 更新时间:2023-12-05 01:06:12 25 4
gpt4 key购买 nike

我如何检查是否有 thread仅包含 sender (用户 1)和 recipient (用户 2),没有其他用户。

模型.py

class Thread(models.Model):
user = models.ManyToManyField(User)
is_hidden = models.ManyToManyField(User, related_name='hidden_thread', blank=True)

class Message(models.Model):
thread = models.ForeignKey(Thread)
sent_date = models.DateTimeField(default=datetime.now)
sender = models.ForeignKey(User)
body = models.TextField()
is_hidden = models.ManyToManyField(User, related_name='hidden_message', blank=True)

我试过
>>> Thread.objects.filter(user=user1&user2)
>>> Thread.objects.filter(user=user1|user2)
# Both gave me an error: Unsupported operand.

# Then this
>>> Thread.objects.filter(Q(user=user1) & Q(user=user2))
# Which gave me no threads at all.

# Then this
>>> Thread.objects.filter(Q(user=user1) | Q(user=user2)).distinct()
# Gave me threads of both the users.

我想要的是仅与指定用户一起检查线程。假设,用户1想给用户2发送一条消息,我想要的是,首先检查两个用户之间是否存在线程。如果有,请获取该线程,否则创建一个新线程。这怎么可能?最好的方法是什么。请帮我。谢谢你。

请告诉我 | 和有什么区别和 & ?因为我对这两者的结果非常不同。

编辑:
>>> t1 = Thread.objects.get(id=1)
>>> t1
[<User: a>,<User: b>]
>>> t2 = Thread.objects.get(id=2)
>>> t2
[<User: a>,<User: b>,<User: c>]
>>> t3 = Thread.objects.get(id=3)
>>> t3
[<User:a>,<User: c>]
>>> t4 = Thread.objects.get(id=4)
>>> t4
[<User:a>,<User:b>]

我想要的是让线程只有用户 a和用户 b存在,并且没有其他用户。在这种情况下,它将是: t1t4 .希望我说清楚了。谢谢你。

最佳答案

excludedUsers = Users.objects.exclude(id__in=[user1.id, user2.id])
Thread.objects.filter(users=user1).filter(users=user2).exclude(users__in=excludedUsers)

关于django - 如何查询多对多字段中仅描述的对象存在的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com