97 votes

django filtre sur la base de la longueur du texte

Je voudrais filtrer mon modèle sur la base de la longueur du texte. Quelque chose comme

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

où text est un champ Char ou Text dans le modèle MyModel

-20voto

rantanplan Points 3497

Ce serait bien mieux y plus rapide si vous ajoutez juste une colonne qui pré-calcule (mémorise) la longueur du texte.

par exemple

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`

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X