[Google App Engine]如何使用filter()?

问题描述:

我开始使用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') 

但是这是错误。 我可以访问用户属性吗?

没有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') 

罗伯特Kluin说的是对的。我也在你的模型中看到这个。

user = db.ReferenceProperty() 

我认为这应该是user=db.ReferenceProperty(User)

+0

只是注意,你没有指定一个“目标”之类的的ReferenceProperty。 – 2011-03-21 17:27:11