Django-tables2: Izinkan kolom pengurutan menurun untuk menempatkan nilai kosong di bagian bawah kolom

Dibuat pada 2 Agu 2018  ·  6Komentar  ·  Sumber: jieter/django-tables2

Saat bekerja dengan kolom menurun di #595 dan #597 , saya menemukan beberapa perilaku pengurutan menurun yang tampaknya sedikit menyimpang.

Pertimbangkan satu set data seperti ini:

| Rekam | Nilai |
| --- | --- |
| Sebuah | 3 |
| B | 1 |
| C | - |
| D | - |

Saat mengurutkan kolom Nilai dalam urutan menaik, nilai kosong didorong ke bagian bawah daftar:

| Rekam | Nilai |
| --- | --- |
| B | 1 |
| Sebuah | 3 |
| C | - |
| D | - |

Tetapi saat mengurutkan dalam urutan menurun, nilai kosong ditempatkan di bagian atas daftar:

| Rekam | Nilai |
| --- | --- |
| C | - |
| D | - |
| Sebuah | 3 |
| B | 1 |

Dalam beberapa kasus, pengguna ingin "mengabaikan" nilai kosong saat mengurutkan dalam urutan menurun, dan dengan demikian mendorongnya ke bagian bawah daftar, sama seperti dengan naik. Bisakah ini dilakukan?

Komentar yang paling membantu

Hah, well, saya mungkin telah berbicara sendiri tentang kebutuhan akan PR. Dalam kasus contoh saya, perilaku yang diinginkan dapat dicapai dengan menggunakan metode order_FOO() , dan parameter nulls_last Django. Seperti:

def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)

Ini menghasilkan nilai nol yang selalu diurutkan di akhir kolom. Ini berfungsi untuk kasus yang saya perlukan, karena saya dapat memastikan bahwa basis data saya selalu menggunakan nol untuk nilai kosong.

Saya menguji solusi ini untuk kasus-kasus ketika nilainya kosong, dan itu tidak berfungsi. Saya menduga solusi dapat dibuat dengan memodifikasi sesuatu dalam django-tables2 order_by , tetapi jika kita berbicara tentang kasus tepi, mungkin sort-with-nulls-last order_FOO() solusi lebih baik daripada mengacaukan sumbernya.

Bagaimanapun, saya dapat menganggap permintaan saya ditutup. Jika orang lain menuntut untuk memperlakukan nilai yang benar-benar kosong dengan cara yang sama, mungkin PR dapat ditinjau kembali.

Semua 6 komentar

Apakah Anda melihat #529?

Oh, aku melihatnya sekarang. Hm, mungkin saya bisa melihat membuat PR untuk itu juga.

Akan sangat menyambut!

Hah, well, saya mungkin telah berbicara sendiri tentang kebutuhan akan PR. Dalam kasus contoh saya, perilaku yang diinginkan dapat dicapai dengan menggunakan metode order_FOO() , dan parameter nulls_last Django. Seperti:

def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)

Ini menghasilkan nilai nol yang selalu diurutkan di akhir kolom. Ini berfungsi untuk kasus yang saya perlukan, karena saya dapat memastikan bahwa basis data saya selalu menggunakan nol untuk nilai kosong.

Saya menguji solusi ini untuk kasus-kasus ketika nilainya kosong, dan itu tidak berfungsi. Saya menduga solusi dapat dibuat dengan memodifikasi sesuatu dalam django-tables2 order_by , tetapi jika kita berbicara tentang kasus tepi, mungkin sort-with-nulls-last order_FOO() solusi lebih baik daripada mengacaukan sumbernya.

Bagaimanapun, saya dapat menganggap permintaan saya ditutup. Jika orang lain menuntut untuk memperlakukan nilai yang benar-benar kosong dengan cara yang sama, mungkin PR dapat ditinjau kembali.

Terima kasih telah menjelaskan!

terima kasih atas solusi yang bagus ini @foldedpaper :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

brianmay picture brianmay  ·  6Komentar

applegrew picture applegrew  ·  17Komentar

wtfrank picture wtfrank  ·  32Komentar

mpasternak picture mpasternak  ·  9Komentar

blite picture blite  ·  3Komentar