如何在基于Django类的视图中访问当前用户 [英] How to access current user in Django class based view

查看:129
本文介绍了如何在基于Django类的视图中访问当前用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法在基于Django类的视图中访问当前登录的用户:

I cannot access current logged in user in Django class based view:

models.py:

models.py:

class Userproject(models.Model):
class Meta:
    verbose_name = u'pp'
    verbose_name_plural = u'pps'

user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="project", verbose_name=_("Владелец проекта"))
#user = models.ForeignKey(User, unique=True)

name = models.TextField(u'Название проекта', unique=True)
date_created = models.DateTimeField(u'Дата создания', default=datetime.now(), db_index=True)
date_until = models.DateTimeField(u'Оплачен по', default=datetime.now(), db_index=True)

views.py:

@login_required
class UserprojectList(ListView):
    context_object_name = 'userproject_list'
    queryset = Userproject.objects.filter(user=self.request.user)
    template_name = 'userproject_list.html'  

当我导航到url时出现错误:
未定义名称'self'

when i navigate to url i see error: name 'self' is not defined

如果我将self.request.user更改为request.user
,错误是:未定义名称'request'

if i change self.request.user to request.user the error is: name 'request' is not defined

请注意,用户筛选视图正在运行并显示数据
django 1.8.5

Note that without user filtering view is working and shows data django 1.8.5

推荐答案

您可以覆盖 get_queryset

@login_required
class UserprojectList(ListView):
    context_object_name = 'userproject_list'
    template_name = 'userproject_list.html'
    def get_queryset(self):
        return Userproject.objects.filter(user=self.request.user)

此外,您不能在类上使用装饰器,因此您必须编写如下内容:

Also you can't use decorators on classes, so you have to write something like this:

from django.utils.decorators import method_decorator

class UserprojectList(ListView):
    context_object_name = 'userproject_list'
    template_name = 'userproject_list.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(UserprojectList, self).dispatch(*args, **kwargs)

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

这篇关于如何在基于Django类的视图中访问当前用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆