1. ホーム
  2. django

[解決済み] テキストの長さに基づいたdjangoのフィルタリング

2023-01-17 21:04:54

質問

テキストの長さに基づいてモデルをフィルタリングしたいのですが、どうすればよいでしょうか? 次のようなものです。

MyModel.objects.filter(len(text) > 10)

ここで、text は MyModel モデルの Char または Text フィールドです。

どのように解決するのですか?

もっと良い方法は の長さを事前に計算(メモ)するカラムを追加するだけで、より高速になります。 を計算するカラムを追加するだけでよいでしょう。

class MyModel(models.Model):
    text = models.TextField()
    text_len = models.PositiveIntegerField()

     def save(self, *args, **kwargs):
         self.text_len = len(self.text)
         return super(MyModel, self).save(*args, **kwargs)

MyModel.objects.filter(text_len__gt = 10)     # Here text_len is pre-calculated by us on `save`