Reputation: 199
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
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