Django-如何使用户登录(ListView中的get_queryset)

Den*_*nis 3 django

models.py:

from django.contrib.auth.models import User

class Location(models.Model):
    user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

urls.py:

url(r'^member/user_locations/$', UserLocationsListView.as_view(), name='user_locations'),
Run Code Online (Sandbox Code Playgroud)

我希望用户能够在页面上看到其所有位置。

看来我在使用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
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 5

您的问题与追溯完全无关。追溯显示您的视图使用的模板中的字符无效(在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
Run Code Online (Sandbox Code Playgroud)