当前位置: 首页 > 面试题库 >

django-将列表转换回queryset

向子安
2023-03-14
问题内容

我有一些记录要根据计算值排序。在这里得到答案…就像这样:

sorted(Profile.objects.all(), key=lambda p: p.reputation)

在像这样的Profile类上:

class Profile(models.Model):

    ...

    @property
    def reputation(self):
        ...

不幸的是,通用视图期望有一个queryset对象,如果我给它一个列表,则会抛出一个错误。

有没有一种方法可以返回查询集

要么…

我可以以某种方式将列表转换为查询集吗?在django文档中找不到类似的内容。

我希望不要对数据进行非规范化,但是我想如果需要的话,我会的。

更新/回答:
看来,取回一个查询集的唯一方法是是否可以将所有逻辑都放入sql查询中。

如果不可能,(我认为)你需要对数据进行规范化


问题答案:

将数据列表转换回查询没有任何意义。查询对象从不保存数据。它仅表示对数据库的查询。如果将列表添加到查询中,它将不得不再次获取所有内容,这将是多余的并且在性能方面非常糟糕。

你可以做什么:

  • 描述如何reputation计算该字段;有可能以某种方式对数据库中的数据进行排序。
  • 修改视图以不需要查询对象。如果需要进行其他过滤等操作,则应在进行任何排序之前完成,因为排序将花费更少的时间并具有更少的条目(并且将从数据库中获取的数据更少。)因此,你可以将过滤后的查询对象发送到排序函数在将其发送到模板之前就可以使用(它不在乎是查询还是列表)。


 类似资料:
  • 问题内容: 我有以下内容: 然后再: 我收到一个错误: 我尝试了各种方法将QuerySet转换为标准集或列表。没用。 我如何从QuerySet中删除一个项目,以便它不会从数据库中删除它,并且不返回新的QuerySet(因为它处于循环状态,因此无法使用)? 问题答案: 你可以这样做: 在评估QuerySet时阅读,请注意,将整个结果加载到内存中(例如通过list())是不好的。 参考: 关于评论的更

  • 问题内容: 如何将Django QuerySet转换为字典列表?我没有找到答案,所以我想知道我是否缺少每个人都使用的某种通用辅助函数。 问题答案: 使用方法: 注意:结果是,其行为基本上类似于列表,但实际上不是的实例。使用如果你真的需要的一个实例。

  • 我目前正在使用平铺地图为pyplay中的一个游戏开发地图编辑器。关卡由以下结构中的块构建而成(尽管要大得多): 其中“1”是一块墙,“0”是一块空空气。 以下代码基本上是处理块类型更改的代码:

  • 问题内容: 将a 转换为同时保持Queue顺序的最快方法是什么? 问题答案: 最快的方法是首先使用LinkedList,它可用作列表或队列。 否则您需要复印 注意:处理PriorityQueue时,请使用循环,轮询每个元素并添加到列表中。要列出的PriorityQueue不维护堆顺序。

  • 问题内容: 我已经编写了此函数,用于将元组列表转换为列表列表。有没有更优雅的/ Pythonic的方式来做到这一点? 问题答案: 您可以使用列表推导:

  • 问题内容: 我如何转换 至 问题答案: 使用简单的列表理解: 会给你: