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

时间:2011-03-21 04:23:52

标签: python google-app-engine filter

我开始使用Google App Engine,我想制作像twitter这样的东西。

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

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

2 个答案:

答案 0 :(得分: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)

另一种选择是对设备进行去模糊处理并在邮件上存储“帐户”:

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

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

答案 1 :(得分:0)

Robert Kluin说的是对的。我也在你的模型中看到了这一点。

user = db.ReferenceProperty()

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