gpt4 book ai didi

python - Django:查询集未保存对值的更改?

转载 作者:行者123 更新时间:2023-12-01 02:08:59 25 4
gpt4 key购买 nike

这里,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/

25 4 0
文章推荐: python - tensorflow 偏差和权重变量
文章推荐: jquery - 如何在深度为1的中找到?