我不得不向 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/