python - 如何避免 2 个相等的循环 | 姜戈
问题描述
我得到了这个代码:
i = 1
for item in cart:
data_ps[f"itemId{i}"] = item
data_ps[f"itemDescription{i}"] = item.category.name
data_ps[f"itemAmount{i}"] = item.sell_price
data_ps[f"itemQuantity{i}"] = '1'
i += 1
total_value = format(((shipping_price + cart_price) / installment), '.2f')
data_ps['installmentValue'] = total_value
response = requests.post('https://ws.sandbox.pagseguro.uol.com.br/v2/transactions', headers=headers,
params=params, data=data_ps)
if response.status_code == 200:
for item in cart:
Sell.objects.create(item=item,
date=timezone.now(),
discount=Decimal(0.00),
total_paid=cart.get_total_price(),
buyer=request.user, )
如您所见,有 2 个for item in cart
循环。在第一个之后,我需要获取一个 request.post 然后检查 status_code 是否等于 200。如果是,则代码会生成另一个for item in cart
循环。
我想知道是否有办法避免第二次循环在第一个循环中添加所有这些信息,因为它只是更新我数据库中的一条记录('Sell.objects.create')。
任何想法?
谢谢
解决方案
您可以为您的Sell
模型添加一个值cart
。你可以这样做:
total_value = format(((shipping_price + cart_price) / installment), '.2f')
data_ps['installmentValue'] = total_value
i = 1
for item in cart:
data_ps[f"itemId{i}"] = item
data_ps[f"itemDescription{i}"] = item.category.name
data_ps[f"itemAmount{i}"] = item.sell_price
data_ps[f"itemQuantity{i}"] = '1'
Sell.objects.create(
item=item,
date=timezone.now(),
discount=Decimal(0.00),
total_paid=cart.get_total_price(),
buyer=request.user,
cart=cart, # <= ---------- New ----------
)
i += 1
url = 'https://ws.sandbox.pagseguro.uol.com.br/v2/transactions'
response = requests.post(url, headers=headers, params=params, data=data_ps)
if response.status_code != 200:
Sell.objects.filter(cart=cart).delete()
从技术上讲,使用这种方法,您不会for
从逻辑中删除循环;您只是将它移动到数据库查询中。所以这是一个权衡。响应是否status_code
等于200
大多数时间?还是大部分时间都失败了?你应该在这个权衡中做出决定。
推荐阅读
- highcharts - 如何在条形类型的 consolvetvs highcharts 中按月显示当年的总费用?
- python-3.x - (win10) Python 3.6 - 错误 Pyshark capture.sniff()
- javascript - 各种 globalCompositeOperation 模式的 WebGL 等效项是什么?
- javascript - 单击按钮时难以更改谷歌地图的样式
- go - 从插件中删除主机的源代码以减小文件大小
- c# - EnumWindows 找不到触摸键盘
- r - R 的 assign() 函数何时合适?
- javafx - TornadoFX 中 FXML 文件的前缀路径
- java - Inheriting specifid methods in java
- javascript - Javascript正文溢出:隐藏