Как перечислить заданные данные в порядке возрастания. Столбцы "Имя счета" и "Состояние счета"

введите здесь описание изображения

views.py

def listEngagements(request):

    active=Engagement.objects.filter(status="Active")

    completed=Engagement.objects.filter(status="Completed")

    datas_list=active|completed

    query = request.GET.get('q')

    if query:

        datas_list = Engagement.objects.filter(engagementName__contains=query)

    paginator = Paginator(datas_list, 20) # 6 datas per page

    page = request.GET.get('page',1)

    try:

        datas = paginator.page(page)

    except PageNotAnInteger:

        datas = paginator.page(1)

    except EmptyPage:

        datas = paginator.page(paginator.num_pages)

    return render(request,'engagement.html',{'datas':datas,'username':username})

модели

class Engagement(models.Model):
    engagementName = models.CharField(default=" ",max_length=100,null=True,blank=True)
    engagementValue=models.IntegerField(default=0)
    email = models.EmailField(null=True,blank=True)
    status = models.CharField(max_length=50,null=True)
 
    class Meta:
        ordering =['engagementName']
    def __str__(self):
        return str(self.engagementName)

html код

     <table class="table table-stripped table-hover">
                                        <thead>
                                            <tr>
                                                <th>Account Name</th>
                                                <th>Account Value</th>
                                                <th>Email</th>
                                                <th>Account Status</th>
                                                <th></th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                           {% for i in datas %}
                                            <tr>
                                                <td>{{i.engagementName}}</td>
                                                <td>{{i.engagementValue}}</td> 
                                                <td>{{i.email}}</td>
                                                <td>{{i.status}}</td>
                                                <td>
                                                    <a href="#editEmployeeModal" class="edit" data-toggle="modal" 
                                                    onclick="editengagementDetails(
                                                       name = '{{i.engagementName}}',
                                                      
                                                         
                                                        engagement_id = '{{ i.id }}',
                                                        email = '{{i.email}}',
                                                        status ='{{i.status}}'
                                                        );" ><i
                                                            class="fa fa-edit" data-toggle="tooltip" title="Edit"></i></a>
                                                    <!-- <a href="{% url 'deleteclient' i.id %}" class="delete" ><i
                                                        class="fa fa-trash" data-toggle="tooltip" title="Delete"></i></a> -->
                                                </td>
                                            </tr>
                                    
                                            {% endfor %}
                                        </tbody>

Вы можете установить порядок при создании набора запросов, используя .order_by('field_name').

Вы можете объединить ваши фильтры включения в одном месте с помощью Q

Например, в верхней части вашего views.py import Q

from django.db.models import Q

Потом, когда вы создадите свои наборы записей

datas_list = Engagement.objects.filter(
    Q(status="Active") | Q(status="Completed")
).order_by("engagementName", "status")

Это отсортирует по имени счета, а затем по статусу, например, сначала все активные счета Сьюзан, а затем все завершенные. Вы можете добавить такой же порядок_by в конструкцию набора записей 'if query'.

Если у вас небольшое количество возможных статусов, вы можете избежать использования Q путем цепочки исключений, например,

Engagement.objects.exclude(
    status="Incomplete"
).exclude(
    status="Inactive"
).order_by("engagementName", "status")
Вернуться на верх