- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里,result
是一个查询集。我正在检查它并更新其 price
属性的值,以匹配我从第二个查询中的 price_map.price
值获取的 Product.objects
。
这有效并相应地更新价格。直到进入 .order_by
方法。然后,price
的所有值都会返回到原来的值。
if sort_by in valid_sorts:
for item in result:
retrieved_item = Product.objects.get(name=item.name).get_pricing_info(self.request.session.get('visitors_country'))
if retrieved_item['price_map'] is None:
print 'we got a none here! ', item.name
else:
item.price = retrieved_item['price_map'].price
if sort_by == 'highlow':
result = result.order_by('-price')
elif sort_by == 'lowhigh':
result = result.order_by('price')
elif sort_by == 'newest':
result = result.order_by('-date','-price')
elif sort_by == 'relevancy':
pass
如果我在 .order_by
调用之前和之后添加一些打印语句,以下是我得到的输出:
Just before the order!
79.99
119.99
99.99
69.99
119.99
89.99
69.99
69.99
99.99
44.99
599.99
599.99
69.99
69.99
69.99
69.99
249.99
799.99
119.99
139.99
199.99
249.99
139.99
149.99
139.99
69.99
139.99
199.99
69.99
29.99
0.0
139.99
34.99
54.99
119.99
149.99
69.99
69.99
89.99
119.99
119.99
149.99
149.99
1699.99
69.99
249.99
39.99
39.99
39.99
599.99
999.99
199.99
49.99
119.99
119.99
249.99
99.99
99.99
199.99
69.99
99.99
39.99
169.99
this is the high low sort!
1499.99
599.99
599.99
399.99
349.99
299.99
249.99
209.99
199.99
199.99
179.99
159.99
159.99
129.99
129.99
119.99
119.99
119.99
119.99
119.99
99.99
99.99
89.99
89.99
89.99
69.99
69.99
69.99
69.99
59.99
59.99
49.99
49.99
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
当我在 for 循环中更改价格值后尝试保存项目时,问题的堆栈跟踪:
Traceback (most recent call last):
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/haystack/generic_views.py", line 120, in get
form = self.get_form(form_class)
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 45, in get_form
return form_class(**self.get_form_kwargs())
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/haystack/generic_views.py", line 94, in get_form_kwargs
kwargs = super(FacetedSearchMixin, self).get_form_kwargs()
File "/home/user/.virtualenvs/rf/local/lib/python2.7/site-packages/haystack/generic_views.py", line 65, in get_form_kwargs
kwargs.update({'searchqueryset': self.get_queryset()})
File "/home/user/Documents/sandbox/opt/rock/ro/rf/products/views.py", line 344, in get_queryset
item.save()
TypeError: 'NoneType' object is not callable
最佳答案
order_by
函数返回一个新的查询集实例。由于查询集的惰性性质,新的 result
查询集(带有 order_by
)将执行另一个查询以从数据库获取数据。
由于您没有保存更新的项目,因此该值只是在 python 对象级别更新,而不是保存在数据库中。因此,当您使用新的 result
查询集访问 price
时,它会显示从数据库中获取的结果,该结果仍然是旧的结果。
因此,要解决此问题,请在 Python 级别对对象进行排序,或者在调用 order_by
函数之前保存项目。
关于python - Django:查询集未保存对值的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48832294/
我是一名优秀的程序员,十分优秀!