将通用视图中的查询集限制为以 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
属性
我不得不向 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
属性