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

Limit queryset in generic views to objects with request.user as foreign key

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

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=

,您可以在视图中设置另一个 user_field 属性