14

在数据库中,图像名称以以下格式保存。

+------------+------------+------------+-----------+
| adv_images | start_date | end_date   |        id |
+------------+------------+------------+-----------+
| 1.jpg      | 2013-05-22 | 2013-05-28 |        64 |
| 1a.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 1b.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 1c.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 2.jpg      | 2013-05-22 | 2013-05-28 |        64 |
| 2a.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 2b.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 2c.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 3.jpg      | 2013-05-22 | 2013-05-28 |        64 |
| 3a.jpg     | 2013-05-22 | 2013-05-28 |        64 |
| 3b.jpg     | 2013-05-22 | 2013-05-28 |        64 |
+------------+------------+------------+-----------+

我想通过“adv_images”从 db 组中提取数据,例如,它在 db 中显示 11 条记录,但我只想提取 3 条 ie(1.jpg、2.jpg 和 3.jpg)。基本上1、2、3是专辑的主图像,1a、1b、2a、2b等是子图像。我正在尝试在 django 查询中使用正则表达式,但没有成功。我还想计算每个专辑的图像数量。就像专辑 1 nd 2 的计数为 4,专辑 3 的计数为 3。

N:B:图像名称总是以数字开头。

4

1 回答 1

25

至于第一个问题,您可以使用Django ORM 提供的正则表达式运算符

例如

Model.objects.filter(adv_images__regex=r'^\d+')[:3]

应该根据您设置的顺序输出前 3 行。

只选择整数记录最简单的解决方案可能是

Model.objects.filter(adv_images__regex=r'^\d\.')[:3]

至于第二个问题,数字是否代表唯一的专辑标识符,或者您的片段是否缺少关系字段?

于 2013-05-03T12:45:55.063 回答