1

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

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

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

  • 媒体/一些/文件夹/文件名.jpg
  • 媒体/文件名.jpg
  • 媒体/2021091240-10328.JPG
  • 媒体/aXay-123.jpeg
  • 媒体/一些/另一个/文件夹/202110-12-12.jpeg

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

所以,我尝试了类似的东西;

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

但它不匹配,我不明白要写正确的正则表达式[mysql regexp]

如何使用 Django orm 使用 mysql regexp 进行过滤以获取仅具有类似模式的记录;media/filename.extension?

4

1 回答 1

1

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

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

MyModel.objects.filter(media__iregex=r'^media/[^/]+$')
于 2021-10-20T10:35:12.667 回答