如何避免两个相等的循环|Django



我得到了这个代码:

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吗?还是大部分时间都失败了?你应该在这个权衡中做出决定。

最新更新