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)