我有一个有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/[^/]+$')