使用MySQL REGEXP与Django ORM过滤字符串



我有一个有FileField字段的模型,在这个模型中我们有数百万条记录。

class MyModel(models.Model):
media = models.FileField(upload_to=my_function, db_index=True)
...

这些媒体记录存储在数据库中,如;

  • 媒体/一些/文件夹/filename.jpg
  • 媒体/filename.jpg
  • 媒体/2021091240 - 10328. - jpg
  • 媒体/axay - 123. - jpeg
  • 媒体/一些/一/文件夹/202110 - 12 - 12. - jpeg

等。我需要找到没有嵌套路径的记录,如/some/folder//some/another/folder/与django orm__iregex查找。

所以,我尝试了;

MyModel.objects.filter(media__iregex=r"^media/[0-9a-zA-Z-][.][a-zA-Z]")

,但它不匹配,我不明白写正确的regex [mysql regexp]。

我怎么能做过滤器mysql regexp使用Django orm获得记录只有模式喜欢;media/filename.extension?

您的正则表达式没有量词,因此将为[0-Aa-zA-Z-]字符组选择恰好一个字符。

您可以简单地过滤掉包含至少两个斜杠的元素:

MyModel.objects.filter(media__iregex=r'^media/[^/]+$')

相关内容

  • 没有找到相关文章

最新更新