Is it possible to override. Objects on a django model?

I would by default only return "published" instances (published = True). Is it possible to override .objects so that MyModel.objects.all () will actually return MyModel.objects.filter (published = True)?

It is reasonable? How can I get unpublished on rare occasions when I wanted them?

+7
source share
1 answer

You can do this by writing a custom Manager - just override the get_queryset method and set objects to the manager instance. For example:

 class MyModelManager(models.Manager): def get_queryset(self): return super(MyModelManager, self).get_queryset().filter(published=True) class MyModel(models.Model): # fields # ... objects = MyModelManager() 

See docs for more details. It makes sense if this is your normal default case. To get unpublished, create another manager that you can access, for example, MyModel.unpublished_objects . Again, documents have examples of this type of thing.

+15
source

All Articles