andrewixl
andrewixl

Reputation: 51

Django ifequal and if Statement Always Going to Else tags

I am currently trying to compare the product id to the id given in the URL. But the if statement in the template always returns "else" even though testing provides both to be equal.

views.py (where data is given)

def editstatus(request, product_id):
    try:
        request.session['user_id']
    except KeyError:
        return redirect("/login")
    products = Product.objects.all()
    context = {
    "product":products,
    "theid" : product_id,
    }
    return render(request, 'posystem/status.html', context)

status.html (with not working if statement)

{%for product in product%}
              <tbody>
                <tr>
                  <td>{{product.id}}</td>
                  <td>{{theid}}</td>
                  <td>{{product.product_description}}</td>
                  <td>{{product.product_number}}</td>
                  <td>{{product.product_quantity}}</td>
                  <td>{{product.unit_cost}}</td>
                  <td>{{product.final_cost}}</td>
                  <td>{{product.status}}</td>
                  {% ifequal product.id theid %}
                  <h1>hello</h1>
                  {% else %}
                  <h1>hello2</h1>
                  {% endifequal %}

                  {% if theid %}
                    {% if product.id == theid %}
                    <td><select>
                      <option value="5 Votes Needed">5 Votes Needed</option>
                      <option value="Ready to Order">Ready to Order</option>
                      <option value="Needs to Be Signed">Needs to Be Signed</option>
                      <option value="Ordered">Ordered</option>
                      <option value="Recieved">Recieved</option>
                    </select></td>
                    <td><form class="" action="/changestatus/{{product.id}}" method="post">
                      {% csrf_token %}
                      <button type="submit" name="edit">Save</button>
                    </form></td>
                    {% endif %}
                  {% else %}
                  <td><form class="" action="/status/{{product.id}}" method="post">
                    {% csrf_token %}
                    <button type="submit" name="edit">Edit</button>
                  </form></td>
                  {% endif %}

                </tr>
              </tbody>
              {% endfor %}

I am confused on why it will neither work with a ifequal tag nor a normal if tag.

Upvotes: 1

Views: 254

Answers (1)

Alasdair
Alasdair

Reputation: 308829

Since product_id is from the URL then it will be a string, not an integer. You need to convert it to an integer.

context = {
"product":products,
"theid" : int(product_id),
}

In Python, and the Django template language, '1' is not equal to 1.

Upvotes: 2

Related Questions