使用ReferenceProperties过滤模型

wod*_*eke 5 python google-app-engine

我正在使用谷歌应用引擎,并且无法编写查询来过滤ReferenceProperties.

例如.

class Group(db.Model):
    name = db.StringProperty(required=True)
    creator = db.ReferenceProperty(User)

class GroupMember(db.Model):
    group = db.ReferenceProperty(Group)
    user = db.ReferenceProperty(User)
Run Code Online (Sandbox Code Playgroud)

我尝试过写这样的东西:

members = models.GroupMember.all().filter('group.name =', group_name)
Run Code Online (Sandbox Code Playgroud)

和其他各种不起作用的东西.希望有人能给我一个正确方向的刺激......

Tho*_*day 5

如果您的组具有唯一名称,则"group.name"是组实体的唯一标识符.

这意味着你可以写:

  members = models.GroupMember.all().filter(
    "group =",model.Group.gql("WHERE name=:1", group_name).get()
    )
Run Code Online (Sandbox Code Playgroud)

虽然你只需要这样做,但如果你还没有将组实体放在堆栈的某个地方.

谷歌关于多对多与appengine的文章就在这里.


Tho*_*day 4

如果您想要获取组的成员,ReferenceProperties 具有内置功能。

class GroupMember(db.Model):
    group = db.ReferenceProperty(Group, collection_name="groupMembers")
    user = db.ReferenceProperty(User, collection_name="groupMembers")
Run Code Online (Sandbox Code Playgroud)

然后你可以写:

# get the group entity somehow
group = Group.get(group_key)     
# do something with the members, such as list the nicknames
nicknames = [x.user.nickname for x in group.groupMembers]
Run Code Online (Sandbox Code Playgroud)