0

私のモデルの 1 つのフィールドは、substring1-substring2-substring3-substring4 形式の charField であり、次の範囲の値を持つことができます。

"1-1-2-1"
"1-1-2-2"
"1-1-2-3"
"1-1-2-4"
"2-2-2-6"
"2-2-2-7"
"2-2-2-9"
"3-1-1-10"
"10-1-1-11"
"11-1-1-12"
"11-1-1-13"

たとえば、substring1 の単一の出現回数をカウントする必要があります。この場合、5 つの一意のオカレンス (1、2、3、10、11) があります。

"1-X-X-X"
"2-X-X-X"
"3-X-X-X"
"10-X-X-X"
"11-X-X-XX"

誠に申し訳ありませんが、どこから始めればよいかわかりません。ドキュメントhttps://docs.djangoproject.com/en/1.5/ref/models/querysets/を読みましたが、特定の手がかりは見つかりませんでした。

前もって感謝します。

4

3 に答える 3

1
results = MyModel.objects.all()

pos_id = 0

values_for_pos_id = [res.field_to_check.split('-')[pos_id] for res in results]
values_for_pos_id = set(values_for_pos_id)

これはどのように作動しますか:

  • まず、すべてのオブジェクトを取得します ( results)
  • pos_id部分文字列インデックスです (4 つの部分文字列があるため、範囲は 0 から 3 です)
  • field_to_checkそれぞれ(別名:部分文字列の組み合わせを保存する場所)を(セパレーター)で分割-し、そのオブジェクトの正しい部分文字列を取得します
  • リストをセットに変換します(すべての一意の値を持つため)

次に、単純なlen(values_for_pos_id)ことがあなたのためにトリックを行います

注意:pos_idどこにも設定していない、または設定できない場合は、次のようにループする必要があります。

for pos_id in range(4):
    values_for_pos_id = set([res.field_to_check.split('-')[pos_id] for res in results])
    # process your set results now
    print len(values_for_pos_id)
于 2013-08-20T13:50:05.903 に答える
0

これらの項目をループして (文字列だと思います)、各 substring_ nの値をSet_ nに追加できます。

セット値は一意であるSet_1ため、たとえば、1、2、3、10、11 を含む と呼ばれるセットがあります。

わかる?

于 2013-08-20T13:45:51.100 に答える