Django Sıralama İşemleri

Merhaba, böyle bir viewim var, burada sıralama yapmak istiyorum, ancak alfabetik olması gerekiyor. Bu şekilde yaptığımda türkçe karakterleri sıranın sonuna atıyor. Örnek vermek gerekirse, bir makalemizin adı acele olsun diğeri açlık olsun bu ikisi türkçe olarak arka arkaya gelmesi gerekir ancak açlık olan makale son makalenin (örneğin buda azmak olsun) sonunda çıkıyor. Bu problemi nasıl çözerim? sqlite3 kullanıyorum sanırım ondan kaynaklı

> def a(request):
>     keyword = request.GET.get("keyword")
>     if keyword:
>         makaleler = Makale.objects.filter(title__contains = keyword)
>         return render(request,"a.html",{"makaleler":makaleler})
> 
>     makaleler = Makale.objects.filter(title__startswith="A").order_by("title")
>     context = {
>         "makaleler":makaleler
>     }
>     return render(request, "a.html",context)

Beyler sorunum hala devam ediyor sanırım sqlite kaynaklı bunun çözümü için yardımcı olabilecek birileri yok mudur?

In [1]: sorted('acele olsun diğeri açlık'.split())
Out[1]: ['acele', 'açlık', 'diğeri', 'olsun']

Python’un sorted fonksiyonu düzgün çalışıyor gibi görünüyor, sıralama işlemini order_by yapmak yerine sorted ile yapmayı deneyebilirsiniz.

SQLite kaynakli ise: https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.create_collation

Calismiyor. Daha iyi test case’ler yazman lazim :​) :

>>> sorted(['a', 'b', 'c', 'ç', 'd', 'ı', 'i', 'ö', 'z'])
['a', 'b', 'c', 'd', 'i', 'z', 'ç', 'ö', 'ı']

Ama:

>>> locale.setlocale(locale.LC_ALL, 'tr_TR.UTF-8')
>>> sorted(['a', 'b', 'c', 'ç', 'd', 'ı', 'i', 'ö', 'z'], key=functools.cmp_to_key(locale.strcoll))
['a', 'b', 'c', 'ç', 'd', 'ı', 'i', 'ö', 'z']

Burada comparer alan sort fonksiyonunu key alanla degistirmenin sacmaligini bir kez daha gormus oluyoruz.

1 Like