get_by_id中的查询语句(ndb,GAE)

时间:2015-05-01 10:26:01

标签: python google-app-engine

我正在使用带有webapp2和Python的Google App Engine。

我的User模型带有deleted字段:

class User(ndb.Model):
    first_name = ndb.StringProperty()
    last_name = ndb.StringProperty()
    email = ndb.StringProperty()
    deleted = ndb.BooleanProperty(default=False)

我想通过调用User.get_by_id()来获取User对象,但我想排除deleted字段True的对象。是否可以使用正常的get_by_id()函数执行此操作?

如果没有,我可以覆盖吗?

或者我应该创建一个自定义类方法,像get_by_id_2()一样执行正常的.get()查询,如下所示:User.query(User.key.id()==id, User.deleted==False).get()

你会推荐其他东西吗?

1 个答案:

答案 0 :(得分:3)

查询明显慢于get,并且最终会保持一致性。您可能应该使用正常的get_by_id并在之后检查已删除。你当然可以用一种方法把它包起来:

@classmethod
def get_non_deleted(cls, id):
    entity = cls.get_by_id(id)
    if entity and not entity.deleted:
        return entity