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

a5g8bdjr  于 2023-06-07  发布在  Go
关注(0)|答案(2)|浏览(123)

我有一个基于类的ListView,我想通过登录的user_id来过滤对象,因为Item模型有一个设置的外键。AUTH_USER_MODEL

class ItemListView(LoginRequiredMixin, StaffRequiredMixin, ListView):
  model = Item
  template_name = "items/list_items.html"

在基于函数的视图中,我可以使用request.user来实现这一点,但在基于类的通用视图中则不行。有什么好主意吗?
下面是Item模型

class Item(models.Model):
  user = models.ForeignKey(settings.AUTH_USER_MODEL)
  description = models.CharField(max_length=300)
xam8gpfp

xam8gpfp1#

您可以覆盖ListView中的get_queryset函数,并在self.request.user上进行过滤

def get_queryset(self):
    return Item.objects.filter(user=self.request.user)
epggiuax

epggiuax2#

您可以减少冗余代码,因为您已经在基于类的视图中定义了模型字段:

def get_queryset(self):
    return super().get_queryset().filter(user=self.request.user)

相关问题