我已经做了很多研究,但是还没有找到方法。
我有Document
个带有_owner
属性的小节,该属性指定所有者的ObjectID
,这是每个请求的值,因此它在全球范围内可用。我希望能够默认设置查询的一部分。
例如,执行此查询
MyClass.objects(id='12345')
应该和做的一样
MyClass.objects(id='12345', _owner=global.owner)
因为默认情况下始终添加_owner=global.owner
我还没有找到一种方法来覆盖objects
,并且使用queryset_class
有点令人困惑,因为我仍然必须记得调用“ .owned()
”管理器来添加过滤器每次我想查询一些东西。
它最终就这样...
MyClass.objects(id='12345').owned()
// same that ...
MyClass.objects(id='12345', _owner=global.owner)
有什么想法吗?谢谢!
答案 0 :(得分:1)
以下应该可以解决查询问题(使用常量owned=True
可以简化示例,但可以轻松地将其扩展为使用全局变量):
class OwnedHouseWrapper(object):
# Implements descriptor protocol
def __get__(self, instance, owner):
return House.objects.filter(owned=True)
def __set__(self, instance, value):
raise Exception("can't set .objects")
class House(Document):
address = StringField()
owned = BooleanField(default=False)
class OwnedHouse:
objects = OwnedHouseWrapper()
House(address='garbage 12', owned=True).save()
print(OwnedHouse.objects()) # [<House: House object>]
print(len(OwnedHouse.objects)) # 1