2016-10-23 10 views
0

私はDjango 1.10を使用しています。 、django認証が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私は次のセットアップを持っています私はこのエラーを取得する:

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. 

それはrequest.user.idからメンバーを見つけることができませんようにそれはそう。私は何が欠けていますか?ありがとう。

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

UPDATE 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

ok。私は最初の勧告を行い、UPDATE 2はその応答を示します。私はちょうど私のローカルマシン上で動作する理由を知ることはできませんが、それが死ぬ他のサーバー。どうもありがとう。 – arcee123

+0

エラーが示すように、サーバーのデータベースにログインしているユーザーのための 'Member'を作成していません。 'User'と同時に' Member'を作成するか、コードに 'DoesNotExist'例外を処理させる必要があります。 – Alasdair

関連する問題