按键查询模型 [英] Query for model by key

查看:65
本文介绍了按键查询模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做的是向数据存储查询模型,其中的关键是不是我已有的对象的关键。这里有一些代码:

pre $ code $ class User(db.Model):
partner = db.SelfReferenceProperty()

def text_message(self,msg):
user = User.get_or_insert(msg.sender)

如果不是user.partner:
#user没有有一个合伙人,找到他们一个
#BUG:这一行返回'user'自己... :(
other = db.Query(User).filter('partner =',None).get ()
if other:
#连接用户
else:
#无人连接!

这个想法是找到另一个没有合伙人的 User ,这不是我们已经知道的用户。



我试过 filter('key!=,user.key()) filter('__ key__!=,user.key())和其他一些,并且没有任何东西返回没有的 User 一个伙伴
filter('foo!=,user.key())也不会返回任何结果, rd。

解决方案

有一个非常简单的方法:检索两条记录,并筛选出用户自己的记录(如果存在的话) 。

  def text_message(self,msg):
user = User.get_or_insert(msg.sender)

如果不是user.partner:
#用户没有伙伴,找到他们一个
other = db.Query(User).filter('partner =',None)。 fetch(2)
other = [u for other in u.key()!= user.key()]
if other:
#将用户连接到其他[0]
else:
#无人连接!


What I'm trying to do is query the datastore for a model where the key is not the key of an object I already have. Here's some code:

class User(db.Model):
    partner = db.SelfReferenceProperty()

def text_message(self, msg):
    user = User.get_or_insert(msg.sender)

    if not user.partner:
        # user doesn't have a partner, find them one
        # BUG: this line returns 'user' himself... :(
        other = db.Query(User).filter('partner =', None).get()
        if other:
            # connect users
        else:
            # no one to connect to!

The idea is to find another User who doesn't have a partner, that isn't the user we already know.

I've tried filter('key !=, user.key()), filter('__key__ !=, user.key()) and a couple others, and nothing returns another User who doesn't have a partner. filter('foo !=, user.key()) also returns nothing, for the record.

解决方案

There's a really easy way around this: Retrieve two records, and filter out the user's own one, if it's present.

def text_message(self, msg):
    user = User.get_or_insert(msg.sender)

    if not user.partner:
        # user doesn't have a partner, find them one
        other = db.Query(User).filter('partner =', None).fetch(2)
        other = [u for u in other if u.key() != user.key()]
        if other:
            # connect user with other[0]
        else:
            # no one to connect to!

这篇关于按键查询模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆