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 グループからデータを取得したいのですが、たとえば、データベースに 11 のレコードが表示されていますが、3 つの ie (1.jpg、2.jpg、および 3.jpg) のみを取得したいと考えています。基本的に、1、2、3 がアルバムのメイン画像で、1a、1b、2a、2b などはサブ画像です。django query で正規表現を使用しようとしていますが、成功しません。また、アルバムごとの画像数のカウントも取得したいと考えています。アルバム 1 と 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]

2 番目の問題については、数字は一意のアルバム ID を表しているのでしょうか、それともスニペットにリレーショナル フィールドがありませんか?

于 2013-05-03T12:45:55.063 に答える