2010-06-09 68 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是否可以在管理员中使用。