我想建立一个 proxy model 在Django管理。它将表示原始模型的一个子集。models.py中的代码:
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
现在,我需要使用带有联接的复杂select语句来代替filter()。把它全部注入到客户经理身上的正确方法是什么?
Django提供 extra() queryset修饰符——一个钩子,用于将特定的子句插入由queryset生成的SQL中。
这可以在复杂的情况下使用,可能需要一个或多个附加查询。
如果要在mymodel.objects中进一步使用ORM raw SQL不是解决方案。对于原始SQL,提供了迭代器。
您不能在myModel()上进行任何链接。对象如filter、exclude等。如果在admin中是可能的,那么例如,过滤在其中就不起作用。如果您需要这些特性,您唯一的选择就是不要在管理器的get-query-set方法中使用原始SQL。
我不知道manager.raw在admin中是否可行。