2017-06-09 6 views
0

まず最初に、テンプレートのモデルにアクセスすることに関して多くの質問がありますが、なぜこれが異なるのか説明してください。Django--現在のユーザーのみのテンプレートのモデルフィールドを取得

私はプロフィールページを希望します。ユーザーは詳細を見ることができます。私はそれを行うことができますが、小さなバグが1つあります。 3人のユーザ(A、B、C)があり、ユーザAが自分のプロフィールを見たい場合、彼はそれを3回見る。このように:私は一回の反復後にループを停止するにはどうすればよい

like this

ユーザーは、一度だけの彼のプロファイル情報を取得するようにします。

これは私のURLです:

url(r'^profile/$', views.IndexView.as_view(), name='profile'), 

Views.py:

class IndexView(generic.ListView): 
template_name = 'profile.html' 

def get_queryset(self): 
    return Profile.objects.all() 

とprofile.html:

{% if user.is_authenticated %} 
{% for profile in object_list %} 
<h1>{{ request.user }}'s Profile</h1> 
<table> 
<tr> 
    <td>Username:</td> 
    <td>{{ user.username }}</td> 
</tr> 
<tr> 
    <td>First Name:</td> 
    <td>{{ user.first_name }}</td> 
</tr> 
<tr> 
    <td>Last Name:</td> 
    <td>{{ user.last_name }}</td> 
</tr> 
<tr> 
    <td>Email:</td> 
    <td>{{ user.email }}</td> 
</tr> 
<tr> 
    <td>Personal Info:</td> 
    <td>{{ user.profile.personal_info }}</td> 
</tr> 
<tr> 
    <td>Job Title:</td> 
    <td>{{ user.profile.job_title }}</td> 
</tr> 
<tr> 
    <td>Department:</td> 
    <td>{{ user.profile.department }}</td> 
</tr> 
<tr> 
    <td>Location:</td> 
    <td>{{ user.profile.location }}</td> 
</tr> 
<tr> 
    <td>Expertise:</td> 
    <td>{{ user.profile.expertise }}</td> 
</tr> 
<tr> 
    <td>Phone Number:</td> 
    <td>{{ user.profile.phone_number }}</td> 
</tr> 
<tr> 
    <td>Contact Skype:</td> 
    <td>{{ user.contact_skype }}</td> 
</tr> 
<tr> 
    <td>Contact Facebook:</td> 
    <td>{{ user.contact_facebook }}</td> 
</tr> 
<tr> 
    <td>Contact Linkedin:</td> 
    <td>{{ user.profile.contact_linkedin }}</td> 
</tr> 
</table> 

<form class="form-horizontal" action="" method="post" enctype="multipart/form-data"> 
     {% csrf_token %} 
     {% include 'form-template.html' %} 
     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10"> 
       <a href={% url 'profile_edit' %}><input type="button" class = " col-sm-offset-2 btn bk-bs-btn-warning " name="cancel" value="Edit" /></a> 
      </div> 
     </div> 
</form> 
{% endfor %} 
{% else %} 
    <h2>Please login to see your Profile</h2> 
{% endif %} 

私はDjangoのための初心者です、おかげで進歩です。

答えて

1

あなたはすべてのプロファイルをループしていますが、実際にループ内でこのデータを使用していません。代わりにuser.profileを使用しています。

これは、データベースに3つのプロファイルオブジェクトがある可能性が高いことを意味します。それぞれの場合、現在のユーザーの詳細が表示されますが、これは望ましくありません。

ループを完全に削除して、すべてのuser.profile属性を参照する内容を保持して、目的の結果を得ることができます。


編集

userは、デフォルトではテンプレートに渡されるように見える、と現在ログインしているユーザーへのポイント。だからuser.profileはプロフィールを返し、これは他のことをすることなく動作します。だからuser.profile.personal_infoが有効で、動作するはずです。 profileを直接使用しようとすると、それは同じではなく、定義されていないので、profile.personal_infoは機能しませんでした。あなたのループでは、profileを使用してプロファイルオブジェクトをループしましたが、これは必要ではなく、使用されていませんでした。これが理にかなってほしい。

+0

ありがとうございます。最初はループなしでユーザーを除外しました(たとえば、私はprofile.personal_infoを書きました)、何も返されませんでした。私はそれがプロファイルを認識しなかったからだと思ったので、私は可変プロファイルのループを作成しました。しかし、今私はuser.profile.personal_info(例えば)を書く場合は動作します。これを私に説明してもらえますか? – Uttam

+0

説明が追加されました。 – user6731765

関連する問題