Использование MySQL REGEXP для фильтрации строк с помощью Django ORM
У меня есть модель, которая имеет поле FileField
и в этой модели у нас миллионы записей.
class MyModel(models.Model):
media = models.FileField(upload_to=my_function, db_index=True)
...
Эти медиазаписи хранятся в базе данных как;
- media/some/folder/filename.jpg
- media/filename.jpg
- media/2021091240-10328.JPG
- media/aXay-123.jpeg
- media/some/another/folder/202110-12-12.jpeg
etc. и мне нужно найти записи, которые не имеют вложенного пути, как /some/folder/
или /some/another/folder/
с помощью django orm __iregex
lookup.
Итак, я попробовал что-то вроде;
MyModel.objects.filter(media__iregex=r"^media/[0-9a-zA-Z\-][.][a-zA-Z]")
но он не совпадает и я не понимаю, как написать правильный regex [mysql regexp].
Как я могу сделать фильтр с mysql regexp с помощью Django orm, чтобы получить записи только с шаблоном типа; media/filename.extension
?
Ваш regex не имеет квантификатора, и поэтому выберет ровно один символ для группы символов [0-Aa-zA-Z\-]
.
Вы можете просто отфильтровать элементы, содержащие как минимум две косые черты с помощью:
MyModel.objects.filter(media__iregex=r'^media/[^/]+$')