- en
- Language: ru
- Documentation version: 2.0
2. Как упорядочить набор запросов без учета регистра?
Всякий раз, когда мы пытаемся сделать order_by
с некоторым строковым значением, упорядочивание происходит по алфавиту и регистру. Например,
>>> User.objects.all().order_by('username').values_list('username', flat=True)
<QuerySet ['Billy', 'John', 'Radha', 'Raghu', 'Ricky', 'Ritesh', 'johny', 'johny1', 'paul', 'rishab', 'sharukh', 'sohan', 'yash']>
Если мы хотим упорядочить набор запросов без учета регистра, мы можем поступить следующим образом.:
.. code-block:: ipython
>>> from django.db.models.functions import Lower
>>> User.objects.all().order_by(Lower('username')).values_list('username', flat=True)
<QuerySet ['Billy', 'John', 'johny', 'johny1', 'paul', 'Radha', 'Raghu', 'Ricky', 'rishab', 'Ritesh', 'sharukh', 'sohan', 'yash']>
В качестве альтернативы можно сделать аннотацию с помощью Lower
и затем заказать по аннотированному полю.
User.objects.annotate(
uname=Lower('username')
).order_by('uname').values_list('username', flat=True)