AliReda-M
AliReda-M

Reputation: 339

if statement and for loop problem in django html

I am trying to print all the orders related to a specific customer. I used a for loop to access my orders in the html file, and i used an if statement to make sure that the order is related to the customer.

{% for order in orders %}
    {% if customer.name == order %}
        <a href="">{{ order }}</a>
    {% endif %}
{% endfor %}

in my views I gave my html file access to these variables.

def orderss(request, pk):
    Customer = customer.objects.get(id=pk)
    orders = Order.objects.all()
    context = {
        'customer':Customer,
        'orders': orders,
    }
    return render(request, 'Inventory_Management/orders.html', context)

to reach this page i used a button

<a href="{% url 'orderss' customer.id %}">View Orders</a>

the url is the one below

path('orders/<str:pk>/', orderss, name="orderss")

related models

class Order(models.Model):
   STATUS = (
           ('Pending', 'Pending'),
           ('Out for delivery', 'Out for delivery'),
           ('Delivered', 'Delivered'),
           )
    order_head = models.ForeignKey(order_header, blank=False, null=True, on_delete=models.SET_NULL)
    items = models.ForeignKey(item, blank=False, null=True, on_delete=models.SET_NULL)
    Quantity = models.CharField(max_length=100)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    total = models.CharField(max_length=100)
    status = models.CharField(max_length=200, null=True, choices=STATUS)

def __str__(self):
    return '{self.order_head.Buyer}'.format(self=self)


class customer(models.Model):
    name = models.CharField(max_length=12, blank=False)
    phone = models.CharField(max_length=12, blank=False)
    email = models.CharField(max_length=50, blank=False)
    date_created = models.DateTimeField(auto_now_add=True, null=True)

def __str__(self):
    return self.name

class order_header(models.Model):
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    User = models.CharField(max_length=100, blank=False, default="Seller")
    Type = models.CharField(max_length=100, default="cash")
    Buyer = models.ForeignKey(customer, blank=True, null=True, on_delete=models.SET_NULL)
    Note = models.CharField(max_length=100, blank=True, default="Discount: ")
    Order_Id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

def __str__(self):
    return 'Order Customer: {self.Buyer},  Order Id: {self.Order_Id}'.format(self=self)

now the problem is no orders appear when I press the button, all i get is a blank page even though the specific customer has a number of orders. Help appreciated! Please Help!

Upvotes: 0

Views: 56

Answers (1)

Charnel
Charnel

Reputation: 4432

In template you're trying to compare name field that is string with object (Order). I guess you thought that name will be compared with order string representation using __str__ method.

Try this:

views.py

Customer = customer.objects.get(id=pk)
orders = order_header.objects.filter(Buyer=Customer)
context = {'orders': orders}

template

{% for order_head in orders %}
   {% for order in order_head.order_set.all %}
       <a href="">{{ order }}</a>
   {% endfor %}
{% endfor %}

Upvotes: 2

Related Questions