0

I'm trying to create an if else condition using jinja2 where only table row with the status pending_approval or scheduled will display a delete button beside it. But I'm having trouble figuring it out because all the data in the table is displayed in a for loop so if the condition is true and all row have the delete button and vice versa.

Any help is much appreciated

Below is my code :

model.py

class Leave(models.Model):
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='+')
    type = models.ForeignKey(LeavesType, on_delete=models.CASCADE, related_name='+')
    status = (('cancelled', 'Cancelled'),
              ('taken', 'Taken'),
              ('pending_approval', 'Pending Approval'),
              ('scheduled', 'Scheduled'),
              ('weekend', 'Week End'),
              ('public_holiday', 'Public holiday'),
              )
    status = models.CharField(max_length=50, choices=status, default='pending_approval')

view.py

def my_leaves_view(request):
     leaves_log = Leave.objects.all().filter(employee=request.user.profile.employee.id)
     context = {'leaves_log': leaves_log}
     return render(request, 'hrm/employee/details/my_leaves.html', context)

html

<table id="Log" class="display table table-hover table-responsive leaves-table">
<thead>
    <tr>
        <th class="small text-muted text-uppercase"><strong>Leave Type</strong></th>
        <th class="small text-muted text-uppercase"><strong>Status</strong></th>
        <th class="small text-muted text-uppercase"><strong></strong></th>
    </tr>
</thead>
<tbody>
{% for field in leaves_log %}
    <tr>
        <td>{{field.type}}</td>
        <td><img class="media-object img-circle status-icon-size" src="/media/dashboard/ui/file_status/{{field.status}}.png" style="display: inline-block; height: 24px; margin-right: 10px;">{{field.status}}</td>
        <td><div class="btn-group">
            {% if field.status == 'pending_approval' or 'scheduled'%}
                <button type="button" class="btn btn-default btn-xs dropdown-toggle active" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    Action <span class="caret"></span>
                </button>
                <ul class="dropdown-menu dropdown-menu-right">
                    <li onclick="delete_leaves();">
                        <a href="/hrm/employee/{{field.id}}/delete/" onclick="return confirm('Are you sure you want to delete this item?');">
                            <i class="fa fa-fw fa-trash text-gray-lighter m-r-1"></i>Withdraw
                        </a>
                    </li>
                </ul>
            </div>
        </td>
        {% else %}
        <td></td>
        {% endif %}
    </tr>
</tbody>

1 Answer 1

2

You are not using the or operator correctly. It is used to separate two boolean values, so you can imagine

{% if field.status == 'pending_approval' or 'scheduled' %}

being interpreted as

{% if bool(field.status == 'pending_approval') or bool('scheduled') %}

and bool('any non-empty string') is always True

The correct syntax is

{% if field.status == 'pending_approval' or field.status == 'scheduled' %}

or

{% if field.status in ['pending_approval', 'scheduled'] %}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.