Varniks
Varniks

Reputation: 199

filtering data in many to many field using multiple filters and models in django

models .py

class ShopProfile(models.Model):
    restaurant_name = models.CharField(max_length=100, blank=True)
    slug = models.SlugField(max_length=140, unique=True)
    related_user = models.ForeignKey(User, on_delete=models.CASCADE)

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    created_by = models.ForeignKey(ShopProfile, on_delete=models.CASCADE)

class OrderItem(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    ordered = models.BooleanField(default=False)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

class Order(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    items = models.ManyToManyField(OrderItem)
    total = models.FloatField(blank=True, null=True)

views.py

class InComingOders(TemplateView):
    template_name = 'shop/incoming.html'
    model = Order

    def get_context_data(self, **kwargs):
        context = super(InComingOders, self).get_context_data(**kwargs)
        context['list_orders'] = Order.objects.filter(
                items=(OrderItem.objects.filter(
                    item=(Item.objects.filter(
                       created_by =created_by=ShopProfile.objects.get(related_user=self.request.user))))))
        return context

I need to get all the orders corresponded to each shop by relating the field created_by in the shop profile. if a customer places an order, that item created by shop profile it must display in the shop

Upvotes: 1

Views: 199

Answers (1)

JPG
JPG

Reputation: 88659

Simply, something like this,

list_orders = Order.objects.filter(items__item__created_by=self.request.user)
#views.py
class InComingOders(TemplateView):
    ...

    def get_context_data(self, **kwargs):
        context = super(InComingOders, self).get_context_data(**kwargs)
        context['list_orders'] = Order.objects.filter(items__item__created_by=self.request.user)
        return context

For more and detailed info, refer Lookups that span relationships--(Django-Doc)

Upvotes: 3

Related Questions