2010-06-09 66 views
3

我試圖在django admin中設置一個proxy model。它將代表原始模型的一個子集。代碼models.py:在django admin中設置定製SQL

class MyManager(models.Manager): 
    def get_query_set(self): 
     return super(MyManager, self).get_query_set().filter(some_column='value') 

class MyModel(OrigModel): 
    objects = MyManager() 
    class Meta: 
     proxy = True 

現在,而不是過濾器()我需要使用JOINS一個複雜的SELECT語句。什麼是將其全部注入到客戶經理的正確方法?

回答

1

Django提供extra() QuerySet修飾符 - 用於將特定子句注入由QuerySet生成的SQL中的鉤子。

這可以用於複雜的情況下,也許有一個或多個額外的查詢。

1

如果您想在MyModel.objects raw中進一步使用ORM,SQL是無法解決的。在原始SQL的情況下提供了一個迭代器。

您不能在MyModel()。對象上做任何鏈接作爲過濾器,排除等。如果可以在管理員中使用,例如過濾不起作用。如果你需要這個功能,你唯一的選擇就是不要在管理者的get_query_set方法中使用raw sql。

我不知道Manager.raw是否可以在管理員中使用。