Django - 另一组中的对象集减去存在

时间:2012-02-13 00:13:22

标签: django django-models

我正在尝试在另一组对象中获取Django Minus中的一组对象。我有一个Message模型,其中包含一个指定它所属的线程的线程字段,以及一个存储用户和他/她看过的消息的MessagesRead模型。我正在尝试返回他/她未读取的消息(以警告新消息),即那些未在MessagesRead表中存储为一对的消息。

如下所示:

def unread_messages(user, thread_id):
    Message.objects.filter(
        self not in MessagesRead.objects.filter(
            message__thread_id=thread_id,
            user=user,
        )
    )

我能以某种方式做到上述情况还是有另一种方式?

1 个答案:

答案 0 :(得分:1)

这假设MessagesRead有一个外键回到线程,related_name设置为messagesread_set

def unread_messages(user, thread_id):
    Message.objects.filter(
            thread_id = thread_id,
        ).exclude(
            messagesread_set__in = MessagesRead.objects.filter(
                message__thread_id = thread_id,
                user = user,
            )
        )