我有以下几点:

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'

我try 了各种方法将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)

阅读when QuerySets are evaluated并注意,将整个结果加载到内存(例如通过list())是不好的.

参考:itertools.ifilter

Update关于 comments :

有多种方法可以做到这一点.其中一个(就内存和时间而言可能不是最好的)是做完全相同的事情:

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)

Django相关问答推荐

对象Django API中的对象

在/Contact-Agent/Get()返回的多个对象返回了多个属性--它返回了2

如何在Django中将可选参数传递给视图?

按下按钮刷新在html文件中显示的变量

如何在 Django 模型中存储元组列表

在 Django 模板中分页时如何正确显示与其父模型字段关联的所有内联字段?

在 settings.py 中指定 Django 测试数据库名称

如何在不使用 sudo 的情况下安装 virtualenv?

Django Facebook Connect 应用推荐

ManyRelatedManager 不可迭代

在 django 中获取本地时区

如何使用 select_for_update 在 Django 中获取查询?

Django 删除未使用的媒体文件

Django urls 直接到 html 模板

如何将 ManyToManyField 呈现为复选框?

刷新时重新提交的django表单

如何在 django 中使用更少的 css?

django 应用基于条件的样式类

暂时禁用 Django 缓存

如何从 django 请求中获取完整的 url