1対多リレーションをフィルタリングして表示する方法が混乱しています。 this questionとthis article後1対多のリレーションクエリの結果をループする方法は?
(and my previous question)私はItem
に加えて、新たにReferenceProperty Tag
を作成:
class Item(db.Model):
...
title = db.StringProperty()
url = db.StringProperty()
image_source_url = db.StringProperty()
....
class Tag(db.Model):
item = db.ReferenceProperty(Item, collection_name = "image_tags")
tag = db.StringProperty()
私はTag
に二つの新しいアイテムを追加し、テーブルには、次のようになります。
Key: ahNzYz...
ID: 269
Key Name:
item: ahNzYXJh...
Item: id=268
tag: glam
Key: ahNxyz...
ID: 270
Key Name:
item: ahNzYXJh...
Item: id=264
tag: casual
私のSortFormHandler
私はこのクエリを実行し、結果をループしてみます:
class SortFormHandler(webapp.RequestHandler):
def get(self):
query = Tag.all()
query.filter("tag", "glam")
for item in query.image_tags:
self.response.out.write("""<a href="%s"><image src="%s" height="110">%s</a>""" %
(item.url, item.image_source_url, item.title) )
これは、属性のエラーを与える:
AttributeError: 'Query' object has no attribute 'image_tags'
ノー成功と他の組み合わせを試してみました。誰かがこの作品の仕組みを説明して、結果をどのようにループするかを理解できたらうれしいです。
ありがとうございました。
私はダニエル・ローズマンのこのようなanswer試みた
更新:
for tag in query:
self.response.out.write("tag is: %s" % tag.tag)
for item in tag.image_tags:
self.response.out.write("""<a href="%s"><image src="%s" height="110">%s</a>""" %
(item.url, item.image_source_url, item.title) )
が、これは
AttributeError: 'Tag' object has no attribute 'image_tags'
この問題を解決する方法についての任意の提案を与えますか?
アップデート2私はTag
テーブルで参照項目のIDカラムitem
の下に格納されていることがわかり
。そのIDを取得するにはどうすればいいですか?私は
tag.item
この行の
for tag in query:
self.response.out.write("tag is: %s. ID is: %s" % (tag.tag, tag.item))
を試してみましたが、これは唯一のオブジェクトを返します。
tag is: glam. ID is: <__main__.Item object at 0x06875EB0>
をアップデート3を
を[OK]を、私はキーを取得する方法を考え出し参照項目の名前:
for tag in query:
self.response.out.write(ID is: %s" % (tag.item.key()))
ので
tag.item.key()
私が使用する必要がある項目のキーを返します
。どのようにしてそのアイテムのurl
とtitle
などを取得できますか?そしてそれをどのように表示するのですか?
for tag in query:
referenced_item_key = tag.item.key()
item = Item.get(referenced_item_key)
self.response.out.write("""<a href="%s"><image src="%s" height="110">%s</a>""" %
(item.url, item.image_source_url, item.title) )
注:名前はTag
このitem
が基準列を参照混乱さ:
更新4
これは、(少なくとも1つのタグの)動作するように見えます
referenced_item_key = tag.item.key()
私はこの項目を別の名前にする必要があります:
item = Item.get(referenced_item_key)
チェック適用されるフィルタ、あなたは、「query.filter( 『タグ』、 『グラム』)を」持っている「(query.filter」のためにそれを変更しますtag = "、" glam ") ' –
@eiefai:ここで述べたように" = "を付けずにクエリが動作するhttp://stackoverflow.com/questions/4829138/how-to-make-the-argument-to-filter-a- variable/4829203#4829203私のUpdate 2では、タグが "glam"として正しく返されていることがわかります。 – Zeynel
'tag.item'はアイテムです。あなたはその鍵を取得する必要はありません、それからもう一度それをフェッチしてください。 –