供应商使用 Django ORM 过滤 CartOrderItems 时出现问题

问题描述 投票:0回答:1

我在使用 Django 的 ORM 通过

CartOrderItems
过滤
Vendor
时遇到问题。这是我遇到的场景和问题:

1.场景:

我有一个 Django 应用程序,供应商可以在其中上传产品(

Product
模型)并管理他们的订单(
CartOrderItems
CartOrder
模型)。

2.目的:

我想获取与当前供应商 (

CartOrder
) 上传的产品关联的订单(
request.user
实例)。

3当前方法:

在我的视图函数

vendor_pannel1
中,我试图按如下方式实现这一目标:

@login_required
def vendor_pannel1(request):
    # Get products uploaded by the current vendor (user)
    vendor_products = Product.objects.filter(user=request.user)

    # Get the vendor IDs associated with these products
    vendor_ids = vendor_products.values_list("vendor_id", flat=True)

    # Get CartOrderItems related to those vendors
    order_items = CartOrderItems.objects.filter(vendor_id__in=vendor_ids)

    # Get orders related to those CartOrderItems
    orders = CartOrder.objects.filter(cartorderitems__in=order_items).distinct()

    context = {
        "orders": orders,
    }
    return render(request, "vendorpannel/dashboard.html", context)
  1. 问题: 它没有过滤任何东西。

5.预期结果:

我希望检索与当前供应商 (

CartOrder
) 上传的产品相关的订单(
request.user
实例)。

6.我的模特:

class CartOrder(models.Model):
    user=models.ForeignKey(CustomUser,on_delete=models.CASCADE)
    item=models.CharField(max_length=100)
    price= models.DecimalField(max_digits=10, decimal_places=2,default="1.99")
    paid_status=models.BooleanField(default=False)
    order_date=models.DateTimeField(auto_now_add=True)
    product_status=models.CharField(choices=STATUS_CHOICE, max_length=30,default="processing")

    class Meta:
        verbose_name_plural="Cart Order"

class CartOrderItems(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    vendor = models.ForeignKey(Vendor,on_delete=models.CASCADE,default=1)default
    order=models.ForeignKey(CartOrder,on_delete=models.CASCADE)
    # product = models.ForeignKey(Product, on_delete=models.CASCADE, default=1) #please dont't ignore it
    invoice_num = models.BigIntegerField(blank=True,null=True)
    product_status=models.CharField(max_length=200)
    item=models.CharField(max_length=100)
    image=models.CharField(max_length=100)
    qty=models.BigIntegerField(default=0)
    price= models.DecimalField(max_digits=12, decimal_places=2,default="15")
    total= models.DecimalField(max_digits=12, decimal_places=2,default="20")
    color=models.ForeignKey(Color,on_delete=models.SET_NULL,null=True,blank=True)
    size=models.ForeignKey(Size,on_delete=models.SET_NULL,null=True,blank=True)



    class Meta:
        verbose_name_plural="Cart Order Items"

    def catagory_image(self):
        return mark_safe('<img src="%s" width="50" height="50"/>'%(self.image.url))
        
    def oder_img(self):
        return mark_safe('<img src="/media/%s" width="50" height="50"/>'%(self.image))

7.我尝试过的:

我尝试过更改过滤条件(

vendor__in=vendor_products
)并探索其他 Django ORM 方法,但尚未成功解决问题。

要求:

有人可以指导我如何在我的应用程序结构的上下文中使用 Django ORM 按供应商正确过滤 CartOrderItems 吗?

python django django-models django-views
1个回答
0
投票

在您的 CartOrderItems 模型中,字段订单上没有 lated_name。因此,在订单字段上使用lated_name,如下所示:

order=models.ForeignKey(CartOrder,on_delete=models.CASCADE, related_name="cartorderitems")

或者

使用默认的 lated_name django 提供外键关系。如需官方文档点击这里:

orders = CartOrder.objects.filter(cartorderitems_set__in=order_items).distinct()

如果此解决方案不起作用,请分享您的产品和用户型号。并澄清供应商与用户有何关系?

© www.soinside.com 2019 - 2024. All rights reserved.