Django filters with Foreign Key

106 views
Skip to first unread message

Ali khan

unread,
Sep 18, 2016, 7:02:09 AM9/18/16
to django...@googlegroups.com
I have two different apps and applying filters by ForeignKey and as newbie I am not able to understand how it works.

My Order App:
          ORDER_STATUS_CHOICES={
          ('created','Created'),
          ('paid','Paid'),
          }

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')

  

  My seller's app:

 class Seller(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    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)
I am trying to keep all the filters in mixin.py so I can call and use as per need. Following is the function and I can't filter orders by user who is the seller.

def sold(self):
        user = self.Seller.user
        order = Seller.objects.filter(user=user)
        return order

Please advise.       

James Schneider

unread,
Sep 18, 2016, 4:14:36 PM9/18/16
to django...@googlegroups.com

There is no relationship between the Order and the Seller, so you can't filter the Order's based on a specific Seller. You probably want to add a FK from Order to Seller.

> Please advise.       
>
> --

I'm a bit confused. Are you trying to filter based on kwarg arguments captured through your urls.py, or via GET/POST parameters provided by a form, or just trying to limit the scope of available objects that a specific user can see?

Everything you've shown here is a model (not an app). Filtering is generally performed either in the views, and/or in the model managers. Can you provide the views and possibly mixins?

If you have existing filters that aren't working, please post up that code along with any trace backs.

-James

Ali khan

unread,
Sep 19, 2016, 1:24:25 AM9/19/16
to django...@googlegroups.com
Thank you for your kind response James.

I must be doing something wrong but I thought that importing different models and assigning them with variable may had help me to filter it out. I will try your suggestion first to save your valued time and then will post with result.

Let me add a field for the seller in my "Orders" model like "seller = models.ForeignKey(Seller)" and then filter it out.
But I tried that before still as per your suggestion I will do that again.
Thanks again.

Regards,
Ali


-James

--
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/CA%2Be%2BciWOPXqojqzt36j4pxL2G3AN2-R9MRJ9MecskLqkLhs%2BKg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

James Schneider

unread,
Sep 19, 2016, 2:09:17 AM9/19/16
to django...@googlegroups.com

On Sep 18, 2016 10:22 PM, "Ali khan" <alipath...@gmail.com> wrote:
>
> Thank you for your kind response James.
>
> I must be doing something wrong but I thought that importing different models and assigning them with variable may had help me to filter it out. I will try your suggestion first to save your valued time and then will post with result.
>
> Let me add a field for the seller in my "Orders" model like "seller = models.ForeignKey(Seller)" and then filter it out.
> But I tried that before still as per your suggestion I will do that again.
> Thanks again.
>

Once you do that, you can filter the orders with something like this:

orders = Order.objects.filter(seller__user=user)

Inside of the filter function you defined. The way you are currently doing it, you'll end up with Seller objects rather than Order objects.

-James

Ali khan

unread,
Sep 19, 2016, 7:19:41 AM9/19/16
to django...@googlegroups.com
I've tried many ways but it ends with the same error that says:

Cannot query "alikhan": Must be "User" instance.

Where alikhan is admin user I've created with createsuperuser.

Hate to bother you again but please advise.

Regards,
Ali

-James

--
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.

Ali khan

unread,
Sep 19, 2016, 8:27:31 AM9/19/16
to django...@googlegroups.com
I just got it done.

Thanks.

Shamaila Moazzam

unread,
Sep 20, 2016, 1:41:39 AM9/20/16
to Django users

Hi ,

i am having the same problem ..with my sellers App .....

can you share your solution....that how you filter 

regards

On Monday, September 19, 2016 at 5:27:31 PM UTC+5, A.Khan wrote:
I just got it done.

Thanks.
On Mon, Sep 19, 2016 at 4:19 AM, Ali khan <alipath...@gmail.com> wrote:
I've tried many ways but it ends with the same error that says:

Cannot query "alikhan": Must be "User" instance.

Where alikhan is admin user I've created with createsuperuser.

Hate to bother you again but please advise.

Regards,
Ali
On Sun, Sep 18, 2016 at 11:08 PM, James Schneider <jrschn...@gmail.com> wrote:

On Sep 18, 2016 10:22 PM, "Ali khan" <alipath...@gmail.com> wrote:
>
> Thank you for your kind response James.
>
> I must be doing something wrong but I thought that importing different models and assigning them with variable may had help me to filter it out. I will try your suggestion first to save your valued time and then will post with result.
>
> Let me add a field for the seller in my "Orders" model like "seller = models.ForeignKey(Seller)" and then filter it out.
> But I tried that before still as per your suggestion I will do that again.
> Thanks again.
>

Once you do that, you can filter the orders with something like this:

orders = Order.objects.filter(seller__user=user)

Inside of the filter function you defined. The way you are currently doing it, you'll end up with Seller objects rather than Order objects.

-James

--
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...@googlegroups.com.

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

A.Khan

unread,
Sep 20, 2016, 1:47:50 AM9/20/16
to Django users
Happy to see we are in same boat. It did work with like:

def prod_sold(self):
        prod = self.get_prod().filter(seller__user=self.account.user)
        sold = Order.objects.filter(id=products)
        return sold
But it only shows number of products sold.

I couldn't make it happen.

If you can find solution share with me as well and I will do the same.

Regards,
Ali 
Reply all
Reply to author
Forward
0 new messages