2015-11-19 53 views
2

我不能訪問當前登錄的用戶在基於Django的類視圖:如何訪問當前用戶在Django的基於類視圖

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.request.user到request.user 錯誤是:名稱「請求」未定義

注意,如果沒有用戶的過濾視圖處於工作狀態並且示出了數據 django的1.8.5

+0

你介意顯示你的'urls.py'嗎? – Nhor

回答

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) 

而且你不能在類使用的裝飾,所以你必須寫是這樣的:

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) 
0

我會嘗試這樣做,在__init__方法:

@login_required 
class UserprojectList(ListView): 
    context_object_name = 'userproject_list' 
    template_name = 'userproject_list.html' 
    def __init__(self, *args, **kwargs): 
     super(UserprojectList, self).__init__(*args, **kwargs) 
     self.queryset = Userproject.objects.filter(user=self.request.user) 
相關問題