首页 > 解决方案 > 如何删除某些类型的django中的记录?

问题描述

我基本上是在构建一个问答游戏。我在数据库中存储了三种类型的记录- Question, Answer, Hint.

现在我想在答案中添加一个删除功能,这样当用户删除答案时,它上面的所有内容都将被删除。

因此,用户可能会提出一个问题,得到一些提示并最终得到答案。然后用户选择删除答案,并且在最后一个问题之前的所有内容都会被删除。

我知道如何删除最后的n记录

last_n = Message.objects.all().order_by('-id')[:10].delete()

但这意味着在最后的n记录中,可能会提出多个问题,因此可以删除这两个问题。

我的条件需要从触发的位置一直删除到最新的类型消息Question

现在我只能得到特定类型的消息,而不是特定类型

Message.objects.filter(type="Question").order_by('-id')[:10]

我该如何做到这一点?

标签: pythondjango

解决方案


假设答案的 id 是 99(这是触发删除事件的地方)并且问题的 id 是 80。此外,每个消息条目都需要与特定用户相关联(您的问题中没有提到,所以我我假设它是那样的)。

answer = Message.objects.get(id=99)
user = answer.user
qs = Message.objects.annotate(
        last_question_id=Subquery(
            Message.objects.filter(type="question", user=user).order_by("-id").values("id")[:1]
        )
     ).filter(
         user=user, id__gt=F('last_question_id'), id__lt=answer.id
     ).delete()

我在这里做了一些假设,如果这些假设是错误的,我的回答也将无效。

假设 1:消息模型对用户有一个 FK

假设2:用户一次只能回答一个问题。即紧接在答案之前的问题是与答案相关联的问题。

假设3:当用户得到答案后触发DELETE事件时,只会删除用户上一个问题和用户上一个答案之间的东西。

让我知道这是否是您正在寻找的答案。


推荐阅读