одер по нулям первым в порядке убывания в django

#python #django #django-models #django-views

#питон #django #django-модели #django-просмотры #python

Вопрос:

Я хочу упорядочить свои данные в Django admin в порядке убывания, но я хочу, чтобы поле null, представляющее задачу, которая не завершилась, было первым в порядке убывания дат.

например

Дата окончания указана следующим образом

5 декабря 2018

2,2017 марта

и не так

5 декабря 2018

2,2017 марта

в моем view.py Я пробовал таким образом

 class TaskViewset(Viewsets.ModelViewset)
queryset = Task.objects.filter(end_date__isnull=True).order_by("-end_date")
  

Это ограничивает то, что было возвращено обратно только к данным, где end_date равно нулю.

Как я могу это сделать, чтобы вернуть данные, включая те задачи, которые завершились, возвращая сначала незаконченную задачу?

Спасибо за вашу помощь.

Ответ №1:

Из документации django

Использование F() для сортировки нулевых значений

Используйте F() и аргумент ключевого слова nulls_first или nulls_last для Expression.asc() или desc() для управления порядком нулевых значений поля. По умолчанию порядок зависит от вашей базы данных.

Например, для сортировки компаний, с которыми не связывались (last_contacted равно нулю), после компаний, с которыми связывались:

 from django.db.models import F 
Company.objects.order_by(F('last_contacted').desc(nulls_last=True))
  

Комментарии:

1. Спасибо, iklinac, но в моем admin.py у меня есть класс, который использует упорядочивание. Изменения, внесенные в ваш ответ, пока не применяются из-за порядка в admin.py , есть ли у вас какие-либо предложения о том, как это настроить? ниже приведен код в admin.py class TaskAdmin(admin.ModelAdmin): ordering = ("-end_date",) это требует корректировки в поле упорядочения.

2. порядок в представлении не имеет ничего общего с порядком на сайте администратора, ваш вопрос был связан с порядком в представлении

3. Да, вы правы. просмотр выполняется сейчас, но в admin то, как это было упорядочено в view, не упорядочено таким образом в admin. Ответ правильный в представлении обработки, просто хочу знать, как это можно исправить с помощью администратора. Большое спасибо, если у вас есть какие-либо предложения, пожалуйста, не стесняйтесь поделиться.

4. docs.djangoproject.com/en/dev/ref/models/options/#ordering