Djangoクエリセットの自然順

ピート・ダーモット

私は、製品コードでソートされた一連の製品をリストするシステムに取り組んでいます。製品コードは、EG1のように、2文字の後に数字が続くもので構成されています。

私は現在、これらの製品を簡単な方法で分類しています

Product.objects.order_by('product_code')

ただし、複数桁の製品コード(EG12など)が存在する可能性があるため、これらは1桁のコードよりも上に表示されます。すなわち、EG1、EG11、EG12、EG13 ... EG19、EG2、EG20など

製品コードに先行ゼロを追加するとこれが修正されることを知っています(つまり、EG1ではなくEG01)が、すでに印刷された文献とEG1を使用する既存のサイトがあるため、これはオプションではありません。

これらの製品を正しい順序で表示するようにこれを修正する方法はありますか?

Matthijs Brouns

ここでの実装(https://github.com/nathforge/django-naturalsortfield)は機能するはずです。この方法の主な利点は、Pythonではなくデータベースで並べ替えを行うため、追加のストレージを犠牲にして、大規模なデータセットでも十分に機能することです。

product_code__sortフィールドを含めるようにモデルを変更する必要があります

class MyModel(models.Model):
    title = models.CharField(max_length=255)
    title_sort = NaturalSortField('title')

ここで、NaturalSortFieldは次のように定義されています。

class NaturalSortField(models.CharField):
    def __init__(self, for_field, **kwargs):
        self.for_field = for_field
        kwargs.setdefault('db_index', True)
        kwargs.setdefault('editable', False)
        kwargs.setdefault('max_length', 255)
        super(NaturalSortField, self).__init__(**kwargs)

    def pre_save(self, model_instance, add):
        return self.naturalize(getattr(model_instance, self.for_field))

    def naturalize(self, string):
        def naturalize_int_match(match):
            return '%08d' % (int(match.group(0)),)

        string = string.lower()
        string = string.strip()
        string = re.sub(r'^the\s+', '', string)
        string = re.sub(r'\d+', naturalize_int_match, string)

        return string

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Djangoクエリセットの結果の順序

分類Dev

Djangoでクエリセットの順序を逆にする

分類Dev

django order_byクエリセット、昇順と降順

分類Dev

順序付きクエリセット用のDjangoクエリセットイテレータ

分類Dev

Djangoクエリセットの差分メソッドが順序を失う

分類Dev

djangoクエリセットでキーの順序を並べ替える

分類Dev

Djangoで特定の順序でクエリセットを構築する方法

分類Dev

Djangoクエリセットの権限

分類Dev

クエリセットのDjango合計

分類Dev

クエリセットのdjango辞書

分類Dev

JsonへのDjangoクエリセット

分類Dev

Djangoクエリセットの結果

分類Dev

Djangoクエリセットのみ

分類Dev

Djangoクエリセット

分類Dev

Djangoは、2つのクエリセットを結合して順番にシリアル化する方法

分類Dev

他のクエリセットmanytomanyからのdjangoクエリセット

分類Dev

JSONFieldのプロパティを使用したDjangoクエリセットの順序付け

分類Dev

Djangoクエリセット-サブクエリの実行

分類Dev

djangoで2つのクエリセットを結合しますが、順序は維持しますか?

分類Dev

redisからのソート済みセットのソートに基づいたDjangoクエリセットの順序付け

分類Dev

ODataの自然ソート$ orderbyクエリ

分類Dev

Djangoクエリセット-アルファベット順に並べ替えてから、特定のエントリを一番上に移動します

分類Dev

Django-クエリセットの出力フォーマット

分類Dev

djangoクエリセットのQオブジェクト

分類Dev

順序付けされていないクエリセットを複数の順序付けされた値と比較しようとしていますdjango

分類Dev

クエリセット順にリストを作成する

分類Dev

空のFileFieldのDjangoクエリセットフィルター?

分類Dev

Django RestFrameworkのModelViewSetのクエリセットを変更する

分類Dev

Djangoのクエリセットを理解する際の問題

Related 関連記事

  1. 1

    Djangoクエリセットの結果の順序

  2. 2

    Djangoでクエリセットの順序を逆にする

  3. 3

    django order_byクエリセット、昇順と降順

  4. 4

    順序付きクエリセット用のDjangoクエリセットイテレータ

  5. 5

    Djangoクエリセットの差分メソッドが順序を失う

  6. 6

    djangoクエリセットでキーの順序を並べ替える

  7. 7

    Djangoで特定の順序でクエリセットを構築する方法

  8. 8

    Djangoクエリセットの権限

  9. 9

    クエリセットのDjango合計

  10. 10

    クエリセットのdjango辞書

  11. 11

    JsonへのDjangoクエリセット

  12. 12

    Djangoクエリセットの結果

  13. 13

    Djangoクエリセットのみ

  14. 14

    Djangoクエリセット

  15. 15

    Djangoは、2つのクエリセットを結合して順番にシリアル化する方法

  16. 16

    他のクエリセットmanytomanyからのdjangoクエリセット

  17. 17

    JSONFieldのプロパティを使用したDjangoクエリセットの順序付け

  18. 18

    Djangoクエリセット-サブクエリの実行

  19. 19

    djangoで2つのクエリセットを結合しますが、順序は維持しますか?

  20. 20

    redisからのソート済みセットのソートに基づいたDjangoクエリセットの順序付け

  21. 21

    ODataの自然ソート$ orderbyクエリ

  22. 22

    Djangoクエリセット-アルファベット順に並べ替えてから、特定のエントリを一番上に移動します

  23. 23

    Django-クエリセットの出力フォーマット

  24. 24

    djangoクエリセットのQオブジェクト

  25. 25

    順序付けされていないクエリセットを複数の順序付けされた値と比較しようとしていますdjango

  26. 26

    クエリセット順にリストを作成する

  27. 27

    空のFileFieldのDjangoクエリセットフィルター?

  28. 28

    Django RestFrameworkのModelViewSetのクエリセットを変更する

  29. 29

    Djangoのクエリセットを理解する際の問題

ホットタグ

アーカイブ