Django ORM:模型对象的封装器

0 投票
1 回答
2606 浏览
提问于 2025-04-19 09:35

我想找一种方法,定义一个包装器,这个包装器会在我调用 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

另外,还有一些类似的话题可以参考:

撰写回答