Override default queryset in Django admin

前端 未结 6 2066
孤城傲影
孤城傲影 2020-11-27 14:51

One of my models has a deleted flag, which is used to hide objects globally:

class NondeletedManager(models.Manager):
    \"\"\"Returns only objects which ha         


        
6条回答
  •  -上瘾入骨i
    2020-11-27 15:22

    Natan Yellin is correct, but you can change the managers order and the first will be the default, then it is the used by the admin:

    class Conversation(BaseModel):
        ...
        deleted = models.BooleanField(default=False)
    
        all_conversations = models.Manager() # includes deleted conversations
        objects = NondeletedManager()
    

    The admin implementation of get_queryset() use ._default_manager instead .objects, as show next

    qs = self.model._default_manager.get_queryset()
    

    ref Django github BaseModelAdmin implementation

    This only ensures that every time you use YourModel.objects, you will not include deleted objects, but the generic views and others uses ._default_manager too. Then if you don't override get_queryset is not a solution. I've just check on a ListView and admin.

提交回复
热议问题