我想默认只返回“已发布”实例(published = True)。是否可以覆盖.objects以便MyModel.objects.all()实际返回MyModel.objects.filter(published = True)?
这是明智的吗?在极少数情况下,如果我想要它们,我怎么能得到未发表的?答案 0 :(得分:16)
您可以通过编写自定义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
之类的内容访问该管理员。同样,文档中有关于此类事物的示例。