У меня есть запрос django, который дает мне ошибочный запрос. Из следующих отдельных запросов он должен дать мне 1 - 0 = 1, но вместо этого он дает мне 0 результатов. Почему это так?Django filter/exclude дает ошибочный результат, почему?
>>> 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)
Yup, поэтому я пробовал это, и он не дает правильных результатов, поскольку он не является достаточно ограничительным, он исключает сообщения, которые были удалены другим пользователем, но не текущим пользователем. Единственный способ понять это - со следующим 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