Проблема фильтрации CartOrderItems по поставщику с помощью Django ORM

Я столкнулся с проблемой фильтрации CartOrderItems по Vendor с помощью ORM Django. Вот сценарий и проблема, с которой я столкнулся:

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, но так и не смог решить проблему.

Request:

Подскажите, пожалуйста, как правильно фильтровать CartOrderItems по Vendor с помощью Django ORM в контексте структуры моего приложения?

В вашей модели CartOrderItems отсутствует related_name в поле order. Поэтому используйте related_name в поле order следующим образом:

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

Или

Используйте стандартное имя_родственника, которое django предоставляет для отношений foreign_key. Для получения официальной документации нажмите здесь:

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

Если это решение не работает, пожалуйста, поделитесь моделью продукта и пользователя. А также уточните, как поставщик связан с пользователем?

Вернуться на верх