データベース内のオブジェクトを検索できるアプリケーションを構築しています(検索するオブジェクトは人物と仮定しましょう)。私がしたいのは、夫婦のような関連するオブジェクトをグループ化することです。言い換えれば、2人の人が同じ姓を共有している場合、彼らは結婚しているとみなされます(素晴らしい例ではありませんが、あなたはそのアイデアを得ます)。姓は、結婚した2人を特定する唯一のものです。 検索結果では、夫婦同士を隣り合わせに表示したい。Djangoに関連するオブジェクトをグループ化する
これは私が欲しいものです、あなたは「ジョン」を検索しましょう:それぞれの名前は、その人のプロフィールページへのリンクである
John Smith - Jane Smith
John Adams - Nancy Adams
John Washington
John Andersson
John Ryan
。
今私が持っているのは、すべてのペアを見つけて、各タプルがペアであるタプルのリストを返す関数です。問題は、検索結果で、ペアになっているすべての名前が2回リストされていることです。 検索クエリ(Person.objects.filter(name__contains = "John"))のクエリを実行し、そのクエリの結果をマッチ関数に送信します。私は元のクエリーセットとマッチ関数の結果の両方をテンプレートに送ります。 私は、マッチ関数がマッチを見つけるすべての人を除外することができると思いますが、わかりませんが、最も効率的な解決策ですか?
は編集:私はコメントで書いたように
、私はマッチさせたい実際の文字列が同一ではありません。自分自身を引用すると:
実際には、私はマッチさせたい文字列ではなく、彼らがより多くの本のように見える 、同一ではない: "foo2は(bar13)" - "とfoo2(bar14)"。つまり、2つの文字列が同じfoo id(2)を持ち、bar idが奇数の場合 (13)の場合、その一致はbar id + 1(14)です。私は
ニースのソリューション!問題は、それが "ラストネーム"(私はOPでこれをより明確にしておくべきである)のように単純ではないということです。実際に、一致させたい文字列は同じではなく、代わりに "foo2(bar13)" - "foo2(bar14)"のようになります。つまり、2つの文字列が同じfoo id(2)を持ち、bar idが奇数(13)ならば、その一致はbar id + 1(14)です。私はこれらのマッチを見つけるために正規表現を持っていますので、あなたのソリューションを私の場合に合わせて拡張することは可能ですか?私はgroupbyの仕組みを100%理解しているわけではありません。 –