我正在尝试循环遍历 django 中的查询集并将查询集中的所有 bool 字段转换为 true。
我想在 success_page 上将这个 bool 值转换为 True,所以我尝试这样做
@login_required
def PaymentSuccessView(request):
...
order = get_object_or_404(CartOrder, stripe_payment_intent=session.id)
cart_order_items = CartOrderItem.objects.filter(order=order)
for c in cart_order_items:
c.paid = True
c.save()
return render(request, "payment/payment_success.html", {"order": order})
问题是,即使我重定向到成功交易的成功页面后,这仍然不起作用。
我也尝试在模型中执行此操作,我不确定这是否是正确的方法,但我尝试了,但仍然不起作用
class CartOrderItem(models.Model):
order = models.ForeignKey(CartOrder, on_delete=models.CASCADE)
vendor = models.ForeignKey(Vendor, on_delete=models.SET_NULL, null=True)
paid = models.BooleanField(default=False)
....
def save(self, *args, **kwargs):
if self.order.payment_status == "paid":
self.paid = True
return super(CartOrderItem, self).save(*args, **kwargs)
这些是我的模型字段
class CartOrderItem(models.Model):
order = models.ForeignKey(CartOrder, on_delete=models.CASCADE)
vendor = models.ForeignKey(Vendor, on_delete=models.SET_NULL, null=True)
paid = models.BooleanField(default=False)
...
class CartOrder(models.Model):
vendor = models.ManyToManyField(Vendor)
buyer = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name="buyer")
stripe_payment_intent = models.CharField(max_length=200,null=True, blank=True)
最佳答案
您可以使用.update()
方法来更新查询集中的所有项目。在你的情况下类似:
CartOrderItem.objects.filter(order=order).update(paid=True)
所以完整的函数可能是这样的:
@login_required
def PaymentSuccessView(request):
...
order = get_object_or_404(CartOrder, stripe_payment_intent=session.id)
CartOrderItem.objects.filter(order=order).update(paid=True)
return render(request, "payment/payment_success.html", {"order": order})
请参阅文档以获取更多信息: https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once
关于python - Django:如何在 django 中循环查询集并将 bool 字段更改为 True?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75934545/