Issue in filtering .....(want to show only the products that are sold and have status of paid in orders App)

29 views
Skip to first unread message

Shamaila Moazzam

unread,
Sep 20, 2016, 1:04:18 AM9/20/16
to Django users
hi
I am a beginner in django/python  :(

I am making a dashboard of sellers App.
I am stuck in filtering orders of the products according to the logged in user(seller)....

sellers/models.py

from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models
from django.contrib.auth.models import User



class SellerAccount(models.Model):
    user = models.ForeignKey(User)
    managers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="manager_sellers", blank=True)
    active = models.BooleanField(default=False)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)


    def __unicode__(self):
        return str(self.user.username)

    def get_absolute_url(self):
        return reverse("products:vendor_detail", kwargs={"vendor_name": self.user.username})


orders/models.py

class Order(models.Model):
    status = models.CharField(max_length=120, choices=ORDER_STATUS_CHOICES, default='created')
    cart = models.ForeignKey(Cart)
    user = models.ForeignKey(UserCheckout, null=True)
    billing_address = models.ForeignKey(UserAddress, related_name='billing_address', null=True)
    shipping_address = models.ForeignKey(UserAddress, related_name='shipping_address', null=True)
    shipping_total_price = models.DecimalField(max_digits=50, decimal_places=2, default=5.99)   
    order_total = models.DecimalField(max_digits=50, decimal_places=2, )
    order_id = models.CharField(max_length=20, null=True, blank=True)
    paymethod = models.CharField(max_length=120, choices=CHOICES, default='CreditCard')
    

    def __unicode__(self):
        return str(self.cart.id)


sellers/mixins.py


import datetime

from django.db.models import Count, Min, Sum, Avg, Max

from dress.mixins import LoginRequiredMixin
from orders.models import Transaction, Order
from products.models import Product

from .models import SellerAccount



class SellerAccountMixin(LoginRequiredMixin, object):
    account = None
    products = []
    transactions = []
    orders = []

    def get_account(self):
        user = self.request.user
        accounts = SellerAccount.objects.filter(user=user)
        if accounts.exists() and accounts.count() == 1:
            self.account = accounts.first()
            return accounts.first()
        return None

    def get_products(self):
        account = self.get_account()
        products = Product.objects.filter(seller=account)
        self.products = products
        return products

   def get_sold_products(self):
        products = self.get_products()
        ******************************************************
          THIS IS THE PROBLEM AREA ????? i want to show orders of the products i got from (products = self.get_products()).
        keeping this thing in mind that order is completed if its status set to be 'paid'....
        OR
        In other words i want to show products of the user that is logged in if the status of that products are paid.
        *****************************************************
        sold = Order.objects.all().filter('products')
        return sold


sellers/views.py

class SellerDashboard(SellerAccountMixin, FormMixin, View):
    form_class = NewSellerForm
    success_url = "/seller/"
            context["products"] = self.get_products()
           
            context["sold_products"] = self.get_sold_products()

sellers/dashboard.html

{{ sold_products }}

i hope someone will definitely figure out my problem....
regards....

Asad Jibran Ahmed

unread,
Sep 20, 2016, 1:09:01 AM9/20/16
to Django users
Hi,
 While you didn't show us the Product model, I assume it has a ForeignKey to the Order model. To filter for Products that have an Order with a sold status, you should look at the documentation for filtering on relationships at https://docs.djangoproject.com/en/1.10/topics/db/queries/#lookups-that-span-relationships.
Regards,
Jibran

Shamaila Moazzam

unread,
Sep 20, 2016, 1:24:06 AM9/20/16
to Django users
Thanks for you kind response ...I am stuck in it :(

I have seller as a foreign key in Product model..

products/models.py

class Product(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    seller = models.ForeignKey(SellerAccount)
   
    title = models.CharField(max_length=120)
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(decimal_places=2, max_digits=20)

Asad Jibran Ahmed

unread,
Sep 20, 2016, 1:32:12 AM9/20/16
to django...@googlegroups.com
How are you associating a product with an order? Is there a way to get a list of products sold for each order?

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/d9c27a7f-fdf0-4abb-b6fb-069b820c5409%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Asad Jibran Ahmed

unread,
Sep 20, 2016, 1:44:19 AM9/20/16
to Django users
Can you share the Cart model? The Order has a foreign key to Cart. I think that may be the model holding details of the products.

Shamaila Moazzam

unread,
Sep 20, 2016, 2:12:54 AM9/20/16
to Django users
user = models.ForeignKey(settings.AUTH_USER_MODEL)

this user is a F.K in products model, orders model , carts model right.
cart is also a F.K in orders like this


class Order(models.Model):
    status = models.CharField(max_length=120, choices=ORDER_STATUS_CHOICES, default='created')
    cart = models.ForeignKey(Cart)
    user = models.ForeignKey(UserCheckout, null=True)
    billing_address = models.ForeignKey(UserAddress, related_name='billing_address', null=True)
    shipping_address = models.ForeignKey(UserAddress, related_name='shipping_address', null=True
......
    seller = models.ForeignKey(SellerAccount, null=True)......i have added this field now to relate sellers app with orders...

now advise me 
how to filter orders of products with status of paid .( of a logged in user )

:)
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.

Asad Jibran Ahmed

unread,
Sep 20, 2016, 2:40:20 AM9/20/16
to django...@googlegroups.com
I'd need to see the full Cart model to confirm, but try something like this to get all products for Orders with the paid status:

def get_products(self):
 orders = Order.objects.filter(user=self.user, status='paid')
 products_list = list()
 for o in orders:
  for p in o.cart.products:
   products_list.append(p)

 return products_list

This depends on their being a ManyToMany relationship to Product in the Cart model.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

Shamaila Moazzam

unread,
Sep 21, 2016, 12:46:44 AM9/21/16
to django...@googlegroups.com
there is no m2m relation in products and cart model....

carts/models.py

class CartItem(models.Model):
    cart = models.ForeignKey("Cart")
    item = models.ForeignKey(Variation)
    quantity = models.PositiveIntegerField(default=1)
    line_item_total = models.DecimalField(max_digits=10, decimal_places=2)

    def remove(self):
        return self.item.remove_from_cart()

    def __unicode__(self):
        return self.item.title

class Cart(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
    items = models.ManyToManyField(Variation, through=CartItem)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    subtotal = models.DecimalField(max_digits=50, decimal_places=2, default=0.00)
    .....

    def __unicode__(self):
        return str(self.id)

products/models.py

class Product(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    seller = models.ForeignKey(SellerAccount)
    # shop = models.ForeignKey(Shop)
    title = models.CharField(max_length=120)
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(decimal_places=2, max_digits=20)




class Variation(models.Model):
    product = models.ForeignKey(Product)
    title = models.CharField(max_length=120)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    sale_price = models.DecimalField(decimal_places=2, max_digits=20, null=True, blank=True)
    active = models.BooleanField(default=True)
    inventory = models.IntegerField(null=True, blank=True) #refer none == unlimited amount

    def __unicode__(self):
        return self.title

--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/FnyOxRU3VC8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users+unsubscribe@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
Reply all
Reply to author
Forward
0 new messages