我的一个模型具有一个delete标志,该标志用于全局隐藏对象:
class NondeletedManager(models.Manager): """Returns only objects which haven't been deleted""" def get_query_set(self): return super(NondeletedManager, self).get_query_set().exclude(deleted=True) class Conversation(BaseModel): ... deleted = models.BooleanField(default=False) objects = NondeletedManager() all_conversations = models.Manager() # includes deleted conversations
如何覆盖Django管理模块使用的默认查询集以包括已删除的对话?
你可以在模型管理类中重写 get_queryset方法。
get_queryset
class MyModelAdmin(admin.ModelAdmin): def get_queryset(self, request): qs = super(MyModelAdmin, self).get_queryset(request) if request.user.is_superuser: return qs return qs.filter(author=request.user)
请注意,在Django <= 1.5中,该方法被命名为just queryset。
queryset