我有一个django查询,它给了我一个错误的查询集。从下面的个人查询中,它应该给我1 - 0 = 1,但它会给我0结果。这是为什么?Django过滤器/排除错误的结果,为什么?
>>> MessageThread.objects.filter(message__recipient=p2)
[<MessageThread: message thread one>]
>>> MessageThread.objects.filter(message__status='deleted', message__recipient=p2)
[]
>>> MessageThread.objects.filter(message__recipient=p2)
.exclude(message__status='deleted', message__recipient=p2)
[]
我该如何建立一个查询来获取query1 - query2?这就是我需要在SQL:
SELECT * FROM messaging_messagethread
WHERE id NOT IN
(SELECT DISTINCT thread_id FROM messaging_message
WHERE status = 'deleted' AND recipient_id=4)
是的,所以我尝试了这一点,它不会产生正确的结果,因为它没有足够的限制,它会排除已经被另一个用户删除的消息,但不包括当前用户。我可以弄清楚这一点的唯一方法是用下面的SQL:'SELECT * FROM messaging_messagethread WHERE id NOT IN(SELECT DISTINCT thread_id FROM messaging_message WHERE status ='deleted'AND recipient_id = 4)' – David542
我认为有一个区别你在你的问题中提出的SQL以及你在评论中所说的内容。你的“消息”模型中的“收件人”字段是什么意思?因为它似乎不是删除该消息的用户。你确定你的SQL是你需要的吗?如果是这样,我的答案应该适合您的需要。否则,请尝试在此处添加模型并用英文写入您希望从查询中获得的内容。 – marianobianchi