django filter on the basis of text length

前端 未结 6 1100
囚心锁ツ
囚心锁ツ 2020-12-07 19:42

I would like to filter my model on the basis of the length of the text Something like

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

where text

6条回答
  •  生来不讨喜
    2020-12-07 20:40

    It would be much better and faster if you just add a column that pre-calculates(memoizes) the length of the text.

    e.g.

    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`
    

提交回复
热议问题