python - Django:如何在 django 中循环查询集并将 bool 字段更改为 True?

标签 python django django-rest-framework django-views

我正在尝试循环遍历 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/

相关文章:

python - 类如何生成根据类属性而变化的回调函数?

django - 在 django 中保存之前更改 CreateView 行为以预览数据

django - 如何在特定时区的 Django 中显示日期时间?

python - 如何在 Django 中的更新/创建/删除 View 上使用 login_required

ajax - Django REST,ajax调用中突然出现403错误

python - Django rest swagger 无法读取 json api 路径

python - 创建具有相同值的字典

python - 每个第三方库的 ImportError

Python:将 numpy Flip 与 memmap 结合使用

python - 使用 django-rest-framework 的自动 'created by user' 字段?