Django ORM:模型对象的封装器
我想找一种方法,定义一个包装器,这个包装器会在我调用 Model.objects.all()
之前被调用。
我希望每次调用 Model.objects
时,它都能先调用我的方法(包装器),然后再返回查询的对象。
我们来看一个例子:
MyModel.objcts.filter(name="Jack")
包装器:
def mymodelWrapper(self):
return self.objects.annotate(size=Sum('id', field='order_size_weight*requested_selling_price'))
我想在后台运行一些注释操作,同时也想应用过滤条件。我知道我想要实现的目标,但我在寻找如何实现这个目标的代码。
1 个回答
1
你说的这个在Django里是完全可以实现的,方法是使用一个自定义模型管理器:
class MyModelManager(models.Manager):
def get_query_set(self):
return super(MyModelManager, self).get_query_set().annotate(size=Sum('id', field='order_size_weight*requested_selling_price'))
class MyModel(models.Model):
objects = MyModelManager()
# fields
另外,还有一些类似的话题可以参考: