我很困惑如何過濾和顯示一對多的關係。如何遍歷一對多關係查詢結果?
繼this question和this article(and my previous question),我創建了一個新的ReferenceProperty Tag
除了Item
:
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
好吧,我想通了如何拿到鑰匙參考項目名稱:
for tag in query:
self.response.out.write(ID is: %s" % (tag.item.key()))
所以
tag.item.key()
返回,我需要使用該項目的關鍵。如何獲得該項目的url
和title
等?我該如何顯示它?
更新4
這似乎工作(至少對於1個標記):
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) )
注:名稱被混淆本item
指參考列在Tag
:
referenced_item_key = tag.item.key()
我應該命名這個項目別的:
item = Item.get(referenced_item_key)
檢查應用的過濾器,你有 'query.filter( 「標籤」, 「華麗」)',改變它「query.filter(」標籤=「,」魅力「)' – 2011-01-28 20:03:34
@eiefai:查詢作品沒有」=「在這裏提到http://stackoverflow.com/questions/4829138/how-to-make-the-argument-to-filter-a-變量/ 4829203#4829203您可以在我的更新2中看到該標記作爲「glam」正確返回。 – Zeynel 2011-01-28 20:20:09