2014-09-02 34 views
0

我正在尋找一些方法來定義一些在我致電Model.objects.all()之前調用的包裝器。Django ORM:模型對象的包裝器

我想每當我打電話,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

你說什麼是Django的完全可行的使用custom model manager

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 

還看到其他類似的主題:

+0

繼續前進,我可以使用'COALESCE'和select extra,這會給我第一個非null值。有沒有辦法在註釋函數中使用相同的方法? – Clayton 2014-09-02 14:02:48

+0

@Jack我認爲這可以是一個單獨的合法的Stackoverflow問題 - 更多的人可以幫助你,而不是使用註釋。謝謝。 – alecxe 2014-09-02 14:05:51