我在使用 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)
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 吗?
在您的 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()
如果此解决方案不起作用,请分享您的产品和用户型号。并澄清供应商与用户有何关系?