使用MongoEngine的ReferenceFields

时间:2015-12-29 20:22:24

标签: python mongoengine

我和MongoEngine一起玩,我找不到查询ReferenceFields的方式

class UserAccount(Document):
    name = StringField()

class UserGroup(Document):
    name = StringField()
    accounts = ListField(ReferenceField(UserAccount))

    group = UserGroup.objects(name='SomeName').first()

我有许多UserAccounts和UserGroups与这些帐户。 我试图获取已经在该组中的帐户列表:

accounts_in_group = group.accounts

并且不在此组中:

accounts_not_in_group = UserAccount.objects(_id__nin=group.accounts)

它不起作用

ValidationError: UserAccount object is not a valid ObjectId

有没有办法实现这个目标?

提前致谢

1 个答案:

答案 0 :(得分:1)

问题在于您尝试将UserAccount模型列表用作ObjectId的列表,这显然会失败。在进行查询之前,您需要将模型列表转换为id列表,例如使用list comprehension:

account_ids = [item.pk for item in group.accounts]
accounts_not_in_group = UserAccount.objects(_id__nin=account_ids)