2011-01-21 130 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

相关问题