# Cannot query "CartOrder object (21)": Must be "User" instance.

**URL:** <https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294>\
**Category:** Using Django\
**Created:** [August 29, 2024, 9:46am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294 "2024-08-29T09:46:07Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![afnanadib](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/afnanadib/32/23567_2.png) [@afnanadib](https://forum.djangoproject.com/u/afnanadib)\
**Post date:** [August 29, 2024, 9:46am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/1 "2024-08-29T09:46:07Z")

</div>

I’m fairly new to Django / Channels so apologies if everything required isn’t being shown here. I’d be happy to provide further info if necessary.  
Anyway, I’ve been working on an Ecommerce Website and am running into this error:

```auto
ValueError at /checkout/53469/
Cannot query "CartOrder object (21)": Must be "User" instance.

```

Here my checkout View:

```auto
@login_required
def checkout(request, oid):
    order = CartOrder.objects.get(oid=oid)
    order_items = CartOrderItems.objects.filter(order=order)

    context = {
        "order":order,
        "order_items":order_items,
    }

    return render(request, "core/checkout.html", context)

```

Checkout URL

```auto
    path('checkout/<oid>/', checkout, name="checkout"),

```

Checkout Model:

```auto
class CartOrder(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    full_name = models.CharField(max_length=100, null=True, blank=True) 
    email = models.CharField(max_length=100, null=True, blank=True) 
    phone = models.CharField(max_length=100, null=True, blank=True) 

    address = models.CharField(max_length=100, null=True, blank=True)
    city = models.CharField(max_length=100, null=True, blank=True)
    state = models.CharField(max_length=100, null=True, blank=True)
    country = models.CharField(max_length=100, null=True, blank=True)
    
    price = models.DecimalField(max_digits=12, decimal_places=2, default="0.00")
    saved = models.DecimalField(max_digits=12, decimal_places=2, default="0.00")
    
    shipping_method = models.CharField(max_length=100, null=True, blank=True) 
    traking_id = models.CharField(max_length=100, null=True, blank=True) 
    traking_website_address = models.CharField(max_length=100, null=True, blank=True) 

    paid_status = models.BooleanField(default=False, null=True, blank=True)
    order_date = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    product_status = models.CharField(choices=STATUS_CHOICE, max_length=30, default="processing") 
    sku = ShortUUIDField(null=True, blank=True, length=5, prefix="SKU", max_length=20, alphabet="1234567890")
    oid = ShortUUIDField(null=True, blank=True, length=5, max_length=20, alphabet="1234567890")

    stripe_payment_intent = models.CharField(max_length=1000, null=True, blank=True) 

    #This class is for showing changed class name in Dashboard 
    class Meta:
        verbose_name_plural = "Cart Order"

```

Checkout FronEnd:

```auto
{% for o in order_items %}
                            <div class="clo-lg-6 mb-2">
                                <div class="card" style="max-width:540px">
                                    <div class="row g-0">
                                        <div class="col-sm-4">
                                            <img src="{{o.image}}" style="width:100%; height: 100%; object-fit:cover;" class="rounded-start" alt="Card image" />
                                        </div>
                                        <div class="col-sm-8">
                                            <div class="card-body">
                                                <h5 class="card-title">{{o.item}}</h5>
                                                <p class="card-text fs-sm">Qty: {{o.qty}}</p>
                                                <p class="card-text fs-sm">Price: ${{o.price}}</p>
                                                <p class="card-text fs-sm">Total: ${{o.total}}</p>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        {% endfor %}

```

---

<div class="post-metadata">

**Author:** ![leandrodesouzadev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/leandrodesouzadev/32/8981_2.png) [@leandrodesouzadev](https://forum.djangoproject.com/u/leandrodesouzadev)\
**Post date:** [August 29, 2024, 10:00am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/2 "2024-08-29T10:00:05Z")

</div>

It looks like the problem is on the `CartOrdemItems` model, because the error is pointing to a `CartOrder` instance being passed to an attribute that’s expecting another type of object. And on your view this is happening here:

> [@afnanadib](#):
>
> ```auto
> order_items = CartOrderItems.objects.filter(order=order)
> 
> ```

So, in this case you’re using the `order` variable that is an instance of `CartOrder` to filter/query the `CartOrderItems` model, using the `order` field defined there.  
I would double check if the `order` field on the `CartOrderItems` model is pointing to the correct model: `CartOrder` and not `User` that’s what seems to be set currently.

---

<div class="post-metadata">

**Author:** ![afnanadib](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/afnanadib/32/23567_2.png) [@afnanadib](https://forum.djangoproject.com/u/afnanadib)\
**Post date:** [August 29, 2024, 10:40am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/3 "2024-08-29T10:40:55Z")

</div>

CardOrderItems Model:

```auto
class CartOrderItems(models.Model):
    order = models.ForeignKey(User, on_delete=models.CASCADE)  
    invoice_no = models.CharField(max_length=200)  
    product_status = models.CharField(max_length=200)  
    item = models.CharField(max_length=200)  
    image = models.CharField(max_length=200)  
    qty = models.IntegerField(default=0)  
    price = models.DecimalField(max_digits=12, decimal_places=2, default="2.50")
    total = models.DecimalField(max_digits=12, decimal_places=2, default="2.50")

    #This class is for showing changed class name in Dashboard 
    class Meta:
        verbose_name_plural = "Cart Order Items"

    
    def order_img(self):
        return mark_safe('<img src="/media/%s" width="50" height="50" />' % (self.image))

```

---

<div class="post-metadata">

**Author:** ![leandrodesouzadev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/leandrodesouzadev/32/8981_2.png) [@leandrodesouzadev](https://forum.djangoproject.com/u/leandrodesouzadev)\
**Post date:** [August 29, 2024, 10:59am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/4 "2024-08-29T10:59:45Z")

</div>

> [@afnanadib](#):
>
> ```auto
> order = models.ForeignKey(User, on_delete=models.CASCADE)  
> 
> ```

Well, that’s it.  
Shouldn’t the `order` `ForeignKey` field point to the `CartOrder` model?

---

<div class="post-metadata">

**Author:** ![afnanadib](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/afnanadib/32/23567_2.png) [@afnanadib](https://forum.djangoproject.com/u/afnanadib)\
**Post date:** [August 29, 2024, 11:09am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/5 "2024-08-29T11:09:05Z")

</div>

Brother,  
if i don’t use order ForeignKey field, then how can i access CartOrder Model through order variable?

```auto
order = CartOrder.objects.get(oid=oid)
order_items = CartOrderItems.objects.filter(order=order)

```

---

<div class="post-metadata">

**Author:** ![leandrodesouzadev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/leandrodesouzadev/32/8981_2.png) [@leandrodesouzadev](https://forum.djangoproject.com/u/leandrodesouzadev)\
**Post date:** [August 29, 2024, 11:30am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/6 "2024-08-29T11:30:28Z")

</div>

I don’t think you understood my statement.  
I’m no saying to remove the foreign key field, i’m saying that it should point to other model.  
Here, let me show you.

```python
class CartOrderItems(models.Model):
    order = models.ForeignKey(
        User, # <---- This shouldn't be `User` but `CartOrder` instead
        on_delete=models.CASCADE
    ) 

```

---

<div class="post-metadata">

**Author:** ![afnanadib](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/afnanadib/32/23567_2.png) [@afnanadib](https://forum.djangoproject.com/u/afnanadib)\
**Post date:** [August 29, 2024, 2:55pm UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/7 "2024-08-29T14:55:06Z")

</div>

Thanks a lot brother. I understand your point. But when i replace the CartOrder instead of User, it shows another problem.

```auto
ValueError at /save_checkout_info/
Cannot assign "<SimpleLazyObject: <User: Afnan>>": "CartOrderItems.order" must be a "CartOrder" instance.

```

---

<div class="post-metadata">

**Author:** ![leandrodesouzadev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/leandrodesouzadev/32/8981_2.png) [@leandrodesouzadev](https://forum.djangoproject.com/u/leandrodesouzadev)\
**Post date:** [August 29, 2024, 2:58pm UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/8 "2024-08-29T14:58:15Z")

</div>

Well, that’s another issue, on another part of the code.

---

<div class="post-metadata">

**Author:** ![afnanadib](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/afnanadib/32/23567_2.png) [@afnanadib](https://forum.djangoproject.com/u/afnanadib)\
**Post date:** [August 29, 2024, 3:05pm UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/9 "2024-08-29T15:05:26Z")

</div>

Is that mean i don’t have any field named order in CartOrder model?

---

<div class="post-metadata">

**Author:** ![white-seolpyo](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/white-seolpyo/32/22386_2.png) [@white-seolpyo](https://forum.djangoproject.com/u/white-seolpyo)\
**Post date:** [August 30, 2024, 12:21am UTC](https://forum.djangoproject.com/t/cannot-query-cartorder-object-21-must-be-user-instance/34294/10 "2024-08-30T00:21:42Z")

</div>

the user attr in CartOrderItems is User object, but you send Order object to user attr…  
that is problem.

```auto
a = User.objects.get({some})
b = CartOrderItems.objects.filter(order=a)

```

if you set wrong foreign key, change model.

```auto
order = models.ForeignKey(CartOrder, on_delete=models.CASCADE)  

```
