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

如何将Django QuerySet转换为列表

邢飞鸿
2023-03-14
问题内容

我有以下内容:

answers = Answer.objects.filter(id__in=[answer.id for answer in answer_set.answers.all()])

然后再:

for i in range(len(answers)):
    # iterate through all existing QuestionAnswer objects
    for existing_question_answer in existing_question_answers:
        # if an answer is already associated, remove it from the
        # list of answers to save
        if answers[i].id == existing_question_answer.answer.id:
            answers.remove(answers[i])           # doesn't work
            existing_question_answers.remove(existing_question_answer)

我收到一个错误:

'QuerySet' object has no attribute 'remove'

我尝试了各种方法将QuerySet转换为标准集或列表。没用。

我如何从QuerySet中删除一个项目,以便它不会从数据库中删除它,并且不返回新的QuerySet(因为它处于循环状态,因此无法使用)?


问题答案:

你可以这样做:

import itertools

ids = set(existing_answer.answer.id for existing_answer in existing_question_answers)
answers = itertools.ifilter(lambda x: x.id not in ids, answers)

在评估QuerySet时阅读,请注意,将整个结果加载到内存中(例如通过list())是不好的。

参考: itertools.ifilter

关于评论的更新:

有多种方法可以做到这一点。一种(在内存和时间方面可能不是最好的一种)是做完全相同的:

answer_ids = set(answer.id for answer in answers)
existing_question_answers = filter(lambda x: x.answer.id not in answers_id, existing_question_answers)


 类似资料:
  • 问题内容: 我正在从Apache Collections 库中使用。我想对这些值进行排序。 我的方法是使用以下方法检索一个值: 这自然工作正常。 主要问题: 现在,我想知道如何将/转换(不确定哪个是正确的)转换为一个,以便可以对其进行排序? 然后,我打算遍历已排序的对象,该对象应该是有序的,并使用迭代器将位于的列表上的位置从()获取适当的键。 问题答案: 就像Erel Segal Halevi在下

  • 我正在查看的文档,我看到了方法,但无法直接转到 是否有方法将转换为?

  • 问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?

  • 问题内容: 如何使用Python将列表转换为字符串? 问题答案: 通过使用 或者,如果列表是整数,则在连接元素之前将其转换。

  • 问题内容: 最近我谈话有什么将要转换的最佳方式是同事,以在Java中,如果有这样做的任何特殊利益。 我想知道最佳转换方法,如果有人可以指导我,我将不胜感激。 这是个好方法吗? 问题答案: 当然,假设每个Item都有一个返回正确类型的键的方法。

  • 我有一张如下的桌子: 如何将其转换为: