2
私は、モデル要素のインスタンスを含むクエリーセット「要素」を持っています。要素は、外部キー「シリーズ」を持って、それぞれのシリーズは、フィールドがあります。Djangoの複数のフィールドにわたる一意の値からのdictsのリスト
subtopic_1_name
subtopic_1_slug
subtopic_2_name
subtopic_2_slug
subtopic_3_name
subtopic_3_slug
私は、フォーム
[{'name': 'somename', 'slug': 'someslug'}, {'name': 'anothername' 'slug': 'anotherslug'}, ... ]
の「name」と「スラグのdictsの「フラット化」のリストを生成する必要があります'は空の文字列を除く3つの名前とスラッグフィールドからの一意の値に対応します。私は現在、一意性をチェックするために 'not in'という非効率なforループを使用しています。それは機能しますが、「要素」が1.9Mまでのメンバーを持つことができるため、遅すぎます。
効率的な方法は何ですか?
更新:
subtopic_list = []
ones = elements.values_list('series__subtopic1_name', 'series__subtopic1_slug').distinct()
twos = elements.values_list('series__subtopic2_name', 'series__subtopic2_slug').distinct()
threes = elements.values_list('series__subtopic3_name', 'series__subtopic3_slug').distinct()
for num in [ones, twos, threes]:
for name, slug in num:
if name != '':
subtopic_list.append({'name': name, 'slug': slug)}
ありがとうございます。私は3つのdistinct()呼び出しの必要性を避ける方法を望んでいましたが、これはより洗練されたコードです。 – thebenedict
なぜあなたはdistinct()呼び出しを取り除きたいですか?可能ですが、あなたの質問では、高価なforループを排除したいと述べたとおっしゃいました。 – Tommy