2011-03-21 132 views
1

我開始使用Google App Engine,並且想製作類似twitter的內容。[Google App Engine]如何使用filter()?

class User(db.Model): 
    account = db.StringProperty() 
    password = db.StringProperty() 
    name = db.StringProperty() 

class Message(db.Model): 
    user = db.ReferenceProperty() 
    text = StringProperty() 
    created = DateTimeProperty(auto_now=True) 

如何獲取特定人的推文? 我試試

que = db.Query(Message).order('-created').filter("user['account'] = ",'Tom') 

但是這是錯誤。 我可以訪問用戶屬性嗎?

回答

6

沒有GQL JOIN操作。查看關於modeling relationships的文章,瞭解一些您可以使用的其他技巧。此外,一定要看Building Scalable, Complex Apps on App Engine,這將是非常值得的你的時間。使用您當前的模型,您需要獲取用戶實體(或構建它的密鑰!),然後使用該實體進行查詢。例如:

user = User.all(keys_only=True).filter('account', 'Tom').get() # only get one. 
# or, build the key (if possible) 
user = db.Key.from_path('User', 'tom') # if you make 'account' the key_name 

messages = Message.all().order('-created').filter("user =", user) 

另一種選擇是denomalize的消息和DESGIN店「帳戶」,以及:

class Message(db.Model): 
    user = db.ReferenceProperty() 
    account = StringProperty() 
    text = StringProperty() 
    created = DateTimeProperty(auto_now=True) 

messages = Message.all().order('-created').filter("account =", 'tom') 
0

羅伯特Kluin說的是對的。我也在你的模型中看到這個。

user = db.ReferenceProperty() 

我認爲這應該是user=db.ReferenceProperty(User)

+0

只是注意,你沒有指定一個「目標」之類的的ReferenceProperty。 – 2011-03-21 17:27:11