У меня есть две модели:
class User(Model):
...
class Message(Model):
sender = ForeignKey(User, CASCADE, 'sent_msgs')
receiver = ForeignKey(User, CASCADE, 'rcvd_msgs')
ignored = BooleanField()
Я пытаюсь аннотировать набор запросов пользователей общей суммой связанных сообщений, т. Е. Суммой sent_msgs
и rcvd_msgs
.Кроме того, любое Сообщение с ignored=True
следует игнорировать.
Я могу сделать это с помощью RawSQL
довольно просто, используя подзапрос:
SELECT COUNT("messages_message"."id")
FROM "messages_message"
WHERE "messages_message"."ignored" = FALSE
AND (
"messages_message"."sender_id" = "users_user"."id"
OR
"messages_message"."receiver_id" = "users_user"."id"
)
queryset = queryset.annotate(msgs_count=RawSQL(that_query_above))
Есть ли способсделать это без использования RawSQL
?