【问题标题】:Limit queryset in generic views to objects with request.user as foreign key将通用视图中的查询集限制为以 request.user 作为外键的对象
【发布时间】:2026-01-20 14:55:01
【问题描述】:

我不得不在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 或任何东西来做到这一点?

【问题讨论】:

    标签: django django-generic-views


    【解决方案1】:

    您可以设计自己的 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(UserFilterViewMixin, LoginRequiredMixin, ListView):
        model = MyModel

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

    【讨论】:

      最近更新 更多