django - 覆盖 Django 管理中的默认查询集

标签 django django-models django-admin

我的一个模型有一个 deleted 标志,用于全局隐藏对象:

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 管理模块使用的默认查询集以包含已删除的对话?

最佳答案

您可以 override get_queryset模型管理类中的方法。

class MyModelAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)

注意在 Django<=1.5 中该方法被命名为 queryset

关于django - 覆盖 Django 管理中的默认查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354099/

相关文章:

python - 当 admin.py 中的字段为只读时,模型字段空白 = false 不起作用

django - 在 django 模板上加载图片库时显示进度条

django - Django中的多个站点

python - 使用关键字参数 'detail' id' : 5 '{' posts/(? P<slug>[\\w-]+)/$'] 反转 }' not found. 1 pattern(s) tried: ['

python - Django 分页器引发 TypeError

django - 在 django admin 中添加新项目时,列 "name"中的空值违反了非空约束

python - 使用 cygwin 版本 python 的 pycharm 解释器

python - 获取 Django 中所有已安装应用程序及其属性的列表

python - Model.save() 和 ModelForm.save() 一起工作

python - 命令未找到 : django-admin (using anaconda 3. 2.4 和 pyenv)