[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)
只是注意,你没有指定一个“目标”之类的的ReferenceProperty。 – 2011-03-21 17:27:11