Использование 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/[^/]+$')