2016-10-23 5 views
0

장고 1.10을 사용하고 있습니다. ,왜 장고 인증은 request.user 변수를 인식하지 못합니까?

내가 구성원 개체의 멤버가 있다는 것을 확인
from django.shortcuts import render 
from IFTHQ import models 
from django.contrib.auth.decorators import login_required 
# Create your views here. 


def home(request): 
    """A view of all bands.""" 
    return render(request, 'IFTHQ/publicpages/front.html') 


@login_required(login_url="login/") 
def dashboard(request): 
    member = models.Member.objects.get(id=request.user.id) 
    data = {} 
    data["profile"] = member 
    return render(request, 'IFTHQ/dashboard/dashboard.html', {"data": data}) 

@login_required(login_url="login/") 
def membership(request): 
    data = {} 
    data["profile"] = member 
    return render(request, 'IFTHQ/dashboard/membership.html', {"data": data}) 

그러나, 나는 로그인 :

settings.py :

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'IFTHQ', 
    'rest_framework' 
] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

Views.py 나는 다음과 같은 설정을 가지고 이 오류를 얻을 : 그것은 request.user.id에서 멤버를 찾을 수없는 것처럼

Environment: 


Request Method: GET 
Request URL: http://<<domain>>/ 

Django Version: 1.10.2 
Python Version: 3.5.2 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'IFTHQ', 
'rest_framework'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
    23.     return view_func(request, *args, **kwargs) 

File "/home/arcee123/trekfed/trekfed/IFTHQ/views.py" in dashboard 
    14.  member = models.Member.objects.get(id=request.user.id) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/db/models/manager.py" in manager_method 
    85.     return getattr(self.get_queryset(), name)(*args, **kwargs) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/db/models/query.py" in get 
    385.     self.model._meta.object_name 

Exception Type: DoesNotExist at/
Exception Value: Member matching query does not exist. 

것 같습니다. 나는 무엇을 놓치고 있습니까? 감사.

UPDATE 1 : 회원 모델 :

class Member(models.Model): 
    User = models.OneToOneField(User, related_name='user') 
    FID = models.FloatField() 
    backup_email = models.CharField(max_length=512) 
    FName = models.CharField(max_length=100) 
    MName = models.CharField(max_length=100, blank=True) 
    LName = models.CharField(max_length=100) 
    Avatar = models.FileField(upload_to='Avatar/%Y/%m/%d', blank=True) 
    Cover = models.FileField(upload_to='Cover/%Y/%m/%d', blank=True) 
    Facebook = models.URLField(default='', blank=True) 
    GooglePlus = models.URLField(default='', blank=True) 
    Twitter = models.URLField(default='', blank=True) 
    Website = models.URLField(default='', blank=True) 
    Bio = models.TextField(default='', blank=True) 
    GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
    Gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 
    Hair_Choices = (
     ('Blond', 'Blond'), 
     ('Black', 'Black'), 
     ('Brown', 'Brown'), 
     ('Brunette', 'Brunette'), 
     ('Red', 'Red'), 
     ('Auburn', 'Auburn'), 
     ('Gray', 'Gray'), 
     ('White', 'White'), 
     ('Colorful', 'Colorful'), 
     ('None', 'None'), 
     ('N/A', 'Not Applicable') 
    ) 
    Hair = models.CharField(max_length=25, choices=Hair_Choices) 
    Height = models.FloatField() 

    def __str__(self): 
     return self.FName + " " + self.LName 

    def shortrank(self): 
     return Rank.objects.filter(User=self.id).order_by("-date_promoted")[0].Rank.SName 

    def currentrank(self): 
     return Rank.objects.filter(User=self.id).order_by("-date_promoted")[0].Rank.LongName 

    def rank_img(self): 
     return Rank.objects.filter(User=self.id).order_by("-date_promoted")[0].Rank.image 

    def primary_address(self): 
     return MemberAddress.objects.get(AddressFK=self.id, Default=True) 

    def primary_phone(self): 
     return MemberPhone.objects.get(PhoneFK=self.id, Default=True) 

    def awards(self): 
     return Award.objects.filter(Member=self.id) 

이 스크린 샷은 연결이 존재하는 것을 알 수있다.

enter image description here

업데이트 2 : models.py :

class Member(models.Model): 
    User = models.OneToOneField(User) 
    ...<More>... 

Views.py :

@login_required(login_url="login/") 
def dashboard(request): 
    member = request.user.member 
    data = {} 
    data["profile"] = member 
    return render(request, 'IFTHQ/dashboard/dashboard.html', {"data": data}) 

새로운 오류 :

Environment: 


Request Method: GET 
Request URL: <<domain.com>> 

Django Version: 1.10.2 
Python Version: 3.5.2 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'IFTHQ', 
'rest_framework'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
    23.     return view_func(request, *args, **kwargs) 

File "/home/arcee123/trekfed/trekfed/IFTHQ/views.py" in dashboard 
    14.  member = request.user.member 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/utils/functional.py" in inner 
    235.   return func(self._wrapped, *args) 

File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py" in __get__ 
    370.      self.related.get_accessor_name() 

Exception Type: RelatedObjectDoesNotExist at/
Exception Value: User has no member. 
+0

"회원 개체에 회원이 있음을 확인했습니다"는 무엇을 의미합니까? 'Member' 클래스는 어떻게 생겼습니까? –

+0

관련 사용자 ID와 동일한 ID를 가진 회원이 없기 때문에? 'get_object_or_404'가 더 적절할 수 있습니다. – Evert

+0

확인. 나는 그 질문을 갱신했다. 이것은 모델과 가치가 있음을 보여줍니다. – arcee123

답변

0

request.user.id은 사용자 테이블의 ID를 제공합니다. 관련 멤버를 가져 오려면 id 필드가 아닌 user 필드를 필터링해야합니다.

member = models.Member.objects.get(user=request.user.id) 

당신이 당신의 외래 키에서 related_name='user'을 제거하면

는, 당신은 간단하게 할 수있는 :

member = request.user.member 

related_name='user'으로, 당신은 member = request.user.user 할 수 있습니다. 그러나 그 관계를 뒤로하면 User이 아니라 Member이되므로 혼란 스럽습니다.

+0

확인. 첫 번째 권장 사항을 수행했으며 업데이트 2는 응답을 보여줍니다. 난 왜 내 로컬 컴퓨터에서 작동하지만, 다른 서버에서 작동하지 않습니다. 감사합니다. – arcee123

+0

오류 메시지에서 서버의 데이터베이스에 로그인 한 사용자의 '구성원'을 만들지 않았습니다. 당신은 항상'User'와 동시에'Member'를 생성하거나,'DoesNotExist' 예외를 처리하도록 코드를 만들 필요가 있습니다. – Alasdair

관련 문제