2016-05-18 1 views
2

models.py:私が欲しいジャンゴ - どのようにユーザーがログイン得るために(リストビューでget_queryset)

url(r'^member/user_locations/$', UserLocationsListView.as_view(), name='user_locations'), 

from django.contrib.auth.models import User 

class Location(models.Model): 
    user = models.ForeignKey(User) 

views.py

class UserLocationsListView(ListView): 
    model = Location 
    context_object_name = 'user_locations' 

    def get_queryset(self): 
     user_locations = Location.objects.filter(user=self.request.user) 
     paginator = Paginator(user_locations, 10) 
     page = self.request.GET.get('page') 
     try: 
      user_locations = paginator.page(page) 
     except PageNotAnInteger: 
      user_locations = paginator.page(1) 
     except EmptyPage: 
      user_locations = paginator.page(paginator.num_pages) 
     return user_locations 

urls.pyユーザはそのページの彼の場所のすべてを見ることができる。

(フィルタリングおよびページ定義にしながら)私はこれをどのように修正する必要があり

私はREQUESTで問題を抱えているようですか?

ありがとうございます!

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/member/user_locations/ 

Django Version: 1.8.6 
Python Version: 2.7.11 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.sites', 
'allauth', 
'allauth.account', 
'allauth.socialaccount', 
'allauth.socialaccount.providers.facebook', 
'allauth.socialaccount.providers.instagram', 
'allauth.socialaccount.providers.twitter', 
'crispy_forms', 
'findlocation_app') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "C:\commercial_projects\fl\lib\site-packages\django\core\handlers\base.py" in get_response 
    164.     response = response.render() 
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in render 
    158.    self.content = self.rendered_content 
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in rendered_content 
    133.   template = self._resolve_template(self.template_name) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in _resolve_template 
    88.   new_template = self.resolve_template(template) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in resolve_template 
    78.    return loader.select_template(template, using=self.using) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\loader.py" in select_template 
    64.      return engine.get_template(template_name, dirs) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\backends\django.py" in get_template 
    30.   return Template(self.engine.get_template(template_name, dirs)) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\engine.py" in get_template 
    167.   template, origin = self.find_template(template_name, dirs) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\engine.py" in find_template 
    141.     source, display_name = loader(name, dirs) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\loaders\base.py" in __call__ 
    13.   return self.load_template(template_name, template_dirs) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\loaders\base.py" in load_template 
    17.    template_name, template_dirs) 
File "C:\commercial_projects\fl\lib\site-packages\django\template\loaders\filesystem.py" in load_template_source 
    38.      return fp.read(), filepath 
File "C:\commercial_projects\fl\lib\codecs.py" in decode 
    314.   (result, consumed) = self._buffer_decode(data, self.errors, final) 

Exception Type: UnicodeDecodeError at /member/user_locations/ 
Exception Value: 'utf8' codec can't decode byte 0xcf in position 748: invalid continuation byte 
+0

は、必要なログインを使用するには良いでしょう[デコレータ](https://docs.djangoproject.com/en/1.9/topics/auth/default/#the-login-required-decorator)デコレータまたは[mixin](https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.mixins.LoginRequiredMixin)を使用して、ログインしていないユーザーがページを見ることを防ぐことができます。場所でユーザーフィールドを空白にすることができれば、匿名ユーザーはユーザーなしですべての場所を見ることはできません。 – Alasdair

答えて

2

あなたの質問は完全にトレースバックとは無関係です。トレースバックには、ビューで使用されるテンプレートに無効な文字(748桁目)があることが示されています。それを除く。

ビュー自体は大丈夫です。メソッドでユーザーを取得する正しい方法は、既に行っているようにself.request.userです。

メソッドをわずかに簡略化することができます。メソッド内でページネーションを行う必要はありません。ListViewがそれを処理します。

class UserLocationsListView(ListView): 
    ... 
    paginate_by = 10 

    def get_queryset(self): 
     queryset = super(UserLocationsListView, self).get_queryset() 
     queryset = queryset.filter(user=self.request.user) 
     return queryset 
+0

あなたが上記のようにしました。私はエラーを受け取ります - 'utf8'コーデックは位置748のバイト0xcfをデコードできません:無効な継続バイト – Dennis

+0

前に同じエラーが発生しました..そしてこのビューでのみ – Dennis

+0

あなたの質問にトレースバックを追加してください。 – Alasdair

関連する問題