2011-01-21 128 views
7

我想默認情況下只返回「已發佈」實例(已發佈= True)。是否有可能重寫.objects,以便MyModel.objects.all()實際返回MyModel.objects.filter(published = True)?是否可以重寫django模型上的.objects?

這是合理的?如何在罕見的情況下獲得未發表的作品?

回答

15

您可以通過編寫自定義Manager來完成此操作 - 只需覆蓋get_queryset方法並將objects設置爲Manager實例即可。例如:

class MyModelManager(models.Manager): 
    def get_queryset(self): 
     return super(MyModelManager, self).get_queryset().filter(published=True) 

class MyModel(models.Model): 
    # fields 
    # ... 

    objects = MyModelManager() 

docs瞭解詳情。這是明智的,如果這將是你平常的默認情況。要取消發佈,請創建另一位經理,您可以使用MyModel.unpublished_objects之類的東西進行訪問。再次,文檔中有這類事情的例子。

+0

我的救命恩人!謝謝! – 2016-12-04 23:44:11

相關問題