【问题标题】:Django ORM: wrapper for model objectsDjango ORM:模型对象的包装器
【发布时间】:2014-10-26 19:13:52
【问题描述】:

我正在寻找一些方法来定义一些在我调用 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'))

我想在后台运行注释并且还想应用过滤器。 我知道我想要实现什么,它是我正在寻找的代码。

【问题讨论】:

    标签: python django django-models orm django-orm


    【解决方案1】:

    你所说的完全可以通过使用custom model manager 使用 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
    

    另见其他类似主题:

    【讨论】:

    • 继续前进,我可以将 COALESCE 与 select extra 一起使用,这给了我第一个非空值。有没有办法在注释函数中使用相同的方法?
    • @Jack 我认为这可能是一个单独的合法 Stackoverflow 问题 - 与使用 cmets 相比,更多人可以帮助您。谢谢。
    猜你喜欢
    • 2013-01-14
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多