django - 将通用 View 中的查询集限制为以 request.user 作为外键的对象

标签 django django-generic-views

我不得不向 views.py 中的 UpdateView、DetailView、ListView 和 DeleteView 类添加一个方法,以将查询集限制为仅返回允许登录用户查看的对象(在我的例子中,意味着他们是对象模型上的外键用户)

def get_queryset(self):
    base_qs = super(ViewName, self).get_queryset()
    return base_qs.filter(user=self.request.user)

是否有更有效的方式使用 Mixin 或其他方式来做到这一点?

最佳答案

你可以设计你自己的mixin:

class UserFilterViewMixin:
    user_field = 'user'

    def get_queryset(self):
        return super().get_queryset().filter(
            **{self.user_field: self.request.user}
    )

接下来你可以使用 mixin,例如:

from django.contrib.auth.mixins import LoginRequiredMixin

class MyListView(<b>UserFilterViewMixin</b>, LoginRequiredMixin, ListView):
    model = MyModel

如果您需要过滤 owner=created_by= 等,您可以在 View 中设置另一个 user_field 属性

关于django - 将通用 View 中的查询集限制为以 request.user 作为外键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59803550/

相关文章:

python - 如何获得Python的等价物[:-1] in django ORM?

django - 操作系统错误 : [Errno 2] No such file or directory: '/tmp/MakeCalls/Static'

python - 使用 while 循环运行 django 微服务?

twitter-bootstrap-3 - Bootstrap btn-block 不起作用

python - Django UpdateView 的内联表单集

python - 在 django RestFramework 中的同一 View 中使用通用 createapiview 和 updateapiview

django - 在 openshift 上重新启动 python 应用程序不会重新加载环境变量

python - 带有额外信息的 Django 表单

用于通用关系的 Django 表单。如何包含它们?

django - 我如何从通用更新 View 中获取我的对象ID以在django 1.1中的表单中使用