Python Django:从QuerySet中删除项而不影响添加的字段

Python Django:从QuerySet中删除项而不影响添加的字段,python,django,pagination,django-queryset,Python,Django,Pagination,Django Queryset,我有一个视图处理程序,需要在其中获取特定查询的一页结果。但是,在获取结果之后,我想向对象添加一个字段,并根据该字段的内容删除某些对象。大概是这样的: objResultSet = MyModel.objects.filter(some_filter_conditions) lstToRemove = [] for objResult in objResultSet: objResult.extra_field = get_extra_field_contents(objResult)

我有一个视图处理程序,需要在其中获取特定查询的一页结果。但是,在获取结果之后,我想向对象添加一个字段,并根据该字段的内容删除某些对象。大概是这样的:

objResultSet = MyModel.objects.filter(some_filter_conditions)

lstToRemove = []
for objResult in objResultSet:
    objResult.extra_field = get_extra_field_contents(objResult)
    if should_remove_because_of_field(objResult.extra_field):
        lstToRemove.append(objResult.id)

objResultSet = objResultSet.exclude(id__in=lstToRemove)
objPage = get_page(objResultSet, RESULTS_PER_PAGE, iPageNum)
objResultSet = objPage.object_list

for objResult in objResultSet:
    do_something_with_extra_field(objResult.extra_field)
objResultSet = MyModel.objects.filter(some_filter_conditions)

extra_fields_models = []
for objResult in objResultSet:
    objResult.extra_field = get_extra_field_contents(objResult)
    if not should_remove_because_of_field(objResult.extra_field):
        extra_fields_models.append(objResult)

objPage = get_page(extra_fields_models, RESULTS_PER_PAGE, iPageNum)
for objResult in extra_fields_models:
    do_something_with_extra_field(objResult.extra_field)
看起来,我排除我挑选的ID的那行从我添加的额外字段中去掉,好像这些结果直接来自数据库。是否有一种方法可以维护我添加的这些额外字段,同时仍然从QuerySet中删除某些项?

在迭代
objResultSet
时,您正在评估QuerySet,并通过创建MyModel实例来迭代结果。您正在向这些模型实例添加额外的字段

但是,您正在使用原始queryset来排除特定的id,这会导致对queryset进行新的求值,从而创建新的模型实例,而不需要额外的字段

尝试创建一个包含额外字段的模型实例列表,并使用这些字段,而不是重用queryset。大概是这样的:

objResultSet = MyModel.objects.filter(some_filter_conditions)

lstToRemove = []
for objResult in objResultSet:
    objResult.extra_field = get_extra_field_contents(objResult)
    if should_remove_because_of_field(objResult.extra_field):
        lstToRemove.append(objResult.id)

objResultSet = objResultSet.exclude(id__in=lstToRemove)
objPage = get_page(objResultSet, RESULTS_PER_PAGE, iPageNum)
objResultSet = objPage.object_list

for objResult in objResultSet:
    do_something_with_extra_field(objResult.extra_field)
objResultSet = MyModel.objects.filter(some_filter_conditions)

extra_fields_models = []
for objResult in objResultSet:
    objResult.extra_field = get_extra_field_contents(objResult)
    if not should_remove_because_of_field(objResult.extra_field):
        extra_fields_models.append(objResult)

objPage = get_page(extra_fields_models, RESULTS_PER_PAGE, iPageNum)
for objResult in extra_fields_models:
    do_something_with_extra_field(objResult.extra_field)