When I try and put the {{ item.product.quantity }}
in it returns an empty value. The quantity value is filled in in the database. I can’t seem t pinpoint the problem. I have tried printing the quantity value but got the same results.
cart.html
JavaScript
x
51
51
1
{% extends 'store/main.html' %}
2
{% load static %}
3
{% block content %}
4
<div class="row">
5
<div class="col-lg-12">
6
<div class="box-element">
7
<a class="btn btn-outline-dark" href="{% url 'store' %}">← Continue Shopping</a>
8
<br>
9
<br>
10
<table class="table">
11
<tr>
12
<th><h5>Items: <strong>3</strong></h5></th>
13
<th><h5>Total:<strong> $42</strong></h5></th>
14
<th>
15
<a style="float:right; margin:5px;" class="btn btn-success" href="{% url 'checkout' %}">Checkout</a>
16
</th>
17
</tr>
18
</table>
19
</div>
20
21
<br>
22
23
<div class="box-element">
24
<div class="cart-row">
25
<div style="flex:2"></div>
26
<div style="flex:2"><strong>Item</strong></div>
27
<div style="flex:1"><strong>Price</strong></div>
28
<div style="flex:1"><strong>Quantity</strong></div>
29
<div style="flex:1"><strong>Total</strong></div>
30
</div>
31
{% for item in items %}
32
<div class="cart-row">
33
<div style="flex:2"><img class="row-image" src="{{ item.product.imageURL }}"></div>
34
<div style="flex:2"><p>{{ item.product.name }}</p></div>
35
<div style="flex:1"><p>R{{ item.product.price|floatformat:2 }}</p></div>
36
<div style="flex:1">
37
<p class="quantity">{{ item.product.quantity }}</p>
38
<div class="quantity">
39
<img class="chg-quantity" src="{% static 'images/arrow-up.png' %}">
40
41
<img class="chg-quantity" src="{% static 'images/arrow-down.png' %}">
42
</div>
43
</div>
44
<div style="flex:1"><p>$32</p></div>
45
</div>
46
{% endfor %}
47
</div>
48
</div>
49
</div>
50
{% endblock content %}
51
views.py
JavaScript
1
29
29
1
from django.shortcuts import render
2
from .models import *
3
4
def store(request):
5
search = request.GET.get('search')
6
products = Product.objects.all()
7
8
if search != '' and search is not None:
9
products = products.filter(name__icontains=search)
10
11
context= {'products': products}
12
return render(request, 'store/store.html', context)
13
14
15
def cart(request):
16
if request.user.is_authenticated:
17
customer = request.user.customer
18
order, created = Order.objects.get_or_create(customer=customer, complete=False)
19
items = order.orderitem_set.all()
20
else:
21
items = []
22
23
context= {'items': items}
24
return render(request, 'store/cart.html', context)
25
26
def checkout(request):
27
context= {}
28
return render(request, 'store/checkout.html', context)
29
models.py
JavaScript
1
59
59
1
from django.db import models
2
from django.contrib.auth.models import User
3
4
5
class Customer(models.Model):
6
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
7
name = models.CharField(max_length=200, null=True)
8
email = models.CharField(max_length=200)
9
10
def __str__(self):
11
return self.name
12
13
14
class Product(models.Model):
15
name = models.CharField(max_length=200, null=True)
16
price = models.FloatField()
17
digital = models.BooleanField(default=False, null=True, blank=True)
18
image = models.ImageField(null=True, blank=True)
19
20
def __str__(self):
21
return self.name
22
23
@property
24
def imageURL(self):
25
try:
26
url = self.image.url
27
except:
28
url = ''
29
return url
30
31
32
class Order(models.Model):
33
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, blank=True)
34
date_ordered = models.DateTimeField(auto_now_add=True)
35
complete = models.BooleanField(default=False, null=True, blank=False)
36
transaction_id = models.CharField(max_length=100, null=True)
37
38
def __str__(self):
39
return str(self.id)
40
41
class OrderItem(models.Model):
42
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
43
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
44
quantity = models.IntegerField(default=0, null=True, blank=True)
45
date_added = models.DateTimeField(auto_now_add=True)
46
47
48
class ShippingAddress(models.Model):
49
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True)
50
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
51
address = models.CharField(max_length=200, null=False)
52
city = models.CharField(max_length=200, null=False)
53
state = models.CharField(max_length=200, null=False)
54
zipcode = models.CharField(max_length=200, null=False)
55
date_added = models.DateTimeField(auto_now_add=True)
56
57
def __str__(self):
58
return self.address
59
If I do print(items)
the result would be:
JavaScript
1
2
1
<QuerySet [<OrderItem: OrderItem object (4)>, <OrderItem: OrderItem object (5)>]>
2
Advertisement
Answer
So quantity
is a field of the Model OrderItem
.
Your query for your returned items
object is:
JavaScript
1
2
1
order, created = Order.objects.get_or_create(customer=customer, complete=False)
2
with Order
being:
JavaScript
1
9
1
class Order(models.Model):
2
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, blank=True)
3
date_ordered = models.DateTimeField(auto_now_add=True)
4
complete = models.BooleanField(default=False, null=True, blank=False)
5
transaction_id = models.CharField(max_length=100, null=True)
6
7
def __str__(self):
8
return str(self.id)
9
and quantity
in
JavaScript
1
6
1
class OrderItem(models.Model):
2
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
3
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
4
quantity = models.IntegerField(default=0, null=True, blank=True)
5
date_added = models.DateTimeField(auto_now_add=True)
6
So your returned object doesn’t contain
JavaScript
1
2
1
{{ item.product.quantity }}
2
So you gotta use (Thanks for highlighting it @Jakumi)
JavaScript
1
2
1
{{ item.quantity }}
2