如何删除某些类型的Django中的记录?

时间:2018-09-22 07:24:55

标签: python django

我基本上是在制作问答游戏。我在数据库中存储了三种类型的记录-QuestionAnswerHint

现在,我想为答案添加一个删除功能,以便当用户删除答案时,位于该问题上方的所有内容都将被删除。

因此,用户可能会问一个问题,得到的提示很少,最后得到答案。然后,用户选择删除答案,直到最后一个问题为止的所有内容都会被删除。

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

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

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

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

目前,我只能收到特定类型的消息,不能达到特定类型

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

我该如何实现?

1 个答案:

答案 0 :(得分:0)

假定答案的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事件时,只会删除用户最后一个问题和用户最后一个答案之间的内容。

让我知道这是否是您想要的答案。