0

クエリを実行し、それを参照プロパティ属性で並べ替えたいとします。テンプレートに送信する前に、クエリの結果にフィールドを一時的に追加し、属性を追加して並べ替えることはできますか?

q = LetterTable.all().order('votes) 

しかし、上記のqの結果を取得して、「Person」というLetterTableのプロパティでソートしたいと思います。ただし、「person」は PersonTable のインスタンスへの参照であるため、参照オブジェクトは必要なく、person.name で並べ替えたいと考えています。これどうやってするの?

誰?

4

1 に答える 1

1

少なくとも、すぐに使えるわけではありません。クエリがどのように機能するかを説明している GAE ドキュメントのページがあります。基本的に、エンティティはプロパティによってインデックスが作成され、クエリを実行すると、インデックスが検索されます。

あなたの場合、インデックスには参照プロパティが含まれており、それが参照する PersonTable エンティティは含まれていないため、インデックスには person.name がありません。

App Engine でこれを行う適切な方法は、非正規化です。つまり、必要なデータの余分なコピーを保存することを意味します。この場合、LetterTable エンティティ内に person.name のコピーを保存します。次に、その名前でクエリと並べ替えを行うことができます。

class LetterTable(db.Model):
    person = db.ReferenceProperty(Person)
    person_name = db.StringProperty()

この方法には確かに欠点があり、主な欠点はデータの同期を維持することです (つまり、ある人が名前を変更した場合、その人を参照するすべての LetterTable インスタンスを見つけて、非正規化された名前をすべて変更する必要があります)。

于 2013-08-07T01:41:25.463 に答える