7
我想默认情况下只返回“已发布”实例(已发布= True)。是否有可能重写.objects,以便MyModel.objects.all()实际返回MyModel.objects.filter(published = True)?是否可以重写django模型上的.objects?
这是合理的?如何在罕见的情况下获得未发表的作品?
我想默认情况下只返回“已发布”实例(已发布= True)。是否有可能重写.objects,以便MyModel.objects.all()实际返回MyModel.objects.filter(published = True)?是否可以重写django模型上的.objects?
这是合理的?如何在罕见的情况下获得未发表的作品?
您可以通过编写自定义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
之类的东西进行访问。再次,文档中有这类事情的例子。
我的救命恩人!谢谢! – 2016-12-04 23:44:11