【发布时间】:2023-04-09 07:54:01
【问题描述】:
我正在为搜索结果查询集中的对象转换(突出显示查询匹配)content 属性。在枚举期间转换属性时在查询集中的每个对象 转换持续,至少在查询集的生命周期内。由于显而易见的原因,我没有应用保存,因为我只希望转换在请求期间在查询集的生命周期内持续存在。
当我尝试将枚举优化为 查询集的切片时,问题出现了,然后 转换不再(暂时)持续。
- 有没有办法让切片也保持转换?
- 为什么我的转换对切片和完整查询集的处理方式不同?
查询集的切片仍然是查询集,尽管它不具有等价性 到原始查询集,即使它是整个查询集的一部分。
- 使用 Django 1.11.4 和 Python 3.6.3
下面是一个演示一般问题的示例:
class Passage(models.Model):
content = models.CharField(max_length=256)
Passage.objects.create(content='test 1')
Passage.objects.create(content='test 2')
In [1]: results = Passage.objects.filter(id__lte=2)
In [2]: for result in results:
...: result.content = "hello world"
...:
In [3]: [result.content for result in results]
Out[3]: ['hello world', 'hello world']
In [4]: results = Passage.objects.filter(id__lte=2)
In [5]: for result in results[0:2]:
...: result.content = "hello world"
...:
In [6]: [result.content for result in results]
Out[6]: ['test 1', 'test 2']
【问题讨论】:
-
很遗憾我无法重现您的问题
-
我已经用真实的演示更新了这个例子。
-
无法重现错误。
-
你必须做一些不同的事情,无论如何,问题现在已经解决了——你不能用切片做这个,因为原始的查询集与切片的 qs 不同。如果可以,那么您必须将切片分配给 var 并对其进行枚举,或者与问题描述中描述的内容不同。
标签: python django python-3.x