request.user 的 Django 通用 CBV 查询集

Django generic CBV queryset with request.user

如果我这样做:

class ActivityListView(ListView):
    template_name = "activities/activities.html"
    queryset = Activity.objects.filter(user=request.user)

我得到:

'request' is not defined

...显然。然后,如果我这样做:

def get_context_data(self, **kwargs):
    queryset = Activity.objects.filter(owner=self.request.user)

    context = super(ActivityListView, self).get_context_data(**kwargs)
    context["activities"] = queryset

    return context

我得到:

ImproperlyConfigured "ActivityListVew" must define "queryset" or "model",

我明白了。我想知道解决此问题的最佳方法是什么?

您应该定义 get_queryset 方法而不是

ListView(或者特别是 View 使用的 MultipleObjectMixin)需要一个可以通过 class 属性定义的常量查询集定义(您的第一次尝试),或者一个动态方法来获取数据,这通过 'get_queryset' 方法完成。有关详细信息,请参阅文档:

https://docs.djangoproject.com/en/1.7/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin.get_queryset