django 在基于类的 ListView 中按用户 id 过滤

chr*_*aka 7 django django-generic-views python-3.x django-class-based-views django-1.8

我有一个基于类的 ListView,我想通过登录的 user_id 过滤对象,因为项目模型有一个指向 settings.AUTH_USER_MODEL 的外键

class ItemListView(LoginRequiredMixin, StaffRequiredMixin, ListView):
  model = Item
  template_name = "items/list_items.html"
Run Code Online (Sandbox Code Playgroud)

在基于函数的视图中,我可以使用 request.user 但不能在基于通用类的视图中执行此操作。关于如何最好地做到这一点的任何想法?

这是项目模型

class Item(models.Model):
  user = models.ForeignKey(settings.AUTH_USER_MODEL)
  description = models.CharField(max_length=300)
Run Code Online (Sandbox Code Playgroud)

小智 14

您可以覆盖 ListView 中的 get_queryset 函数并过滤 self.request.user

def get_queryset(self):
    return Item.objects.filter(user=self.request.user)
Run Code Online (Sandbox Code Playgroud)