私はdjangoを初めて使用し、このビューがプロファイルとポイントに対してそれぞれ2つのSQLクエリを実行している理由を理解しようとして、夜半起きていました。Django デバッグ ツールによると、7 つの SQL クエリが実行されます。
1. SELECT...profile
2. SELECT...points
3. SELECT...profile
4. SELECT...points
5. SELECT...django_session
6. SELECT...auth_user
7. SELECT...posts
プロファイルとポイントが 2 回ヒットする理由がわかりません。プロファイルがヒットするたびに SQL スタック トレースが発生し、ポイントがヒットするたびに同じになります。
プロファイルの SQL スタック トレース:
1./Library/Python/2.7/site-packages/django/contrib/staticfiles/handlers.py in call (72) return self.application(environ, start_response)
ポイントの SQL スタック トレース:
- /Library/Python/2.7/site-packages/django/contrib/staticfiles/handlers.py in call (72) return self.application(environ, start_response)
- /Users/jcarnegie/Documents/web/admin-site/userProfile/views.py in get_context_data(19) context["points"] = Points.objects.get(user_id = self.kwargs["pk"])
これが私のコードです:
class UserProfile(generic.DetailView):
template_name = 'userProfile/story.html'
model = Profile
context_object_name = 'profile'
def get_context_data(self, **kwargs):
context = super(UserProfile, self).get_context_data(**kwargs)
context["points"] = Points.objects.get(user_id = self.kwargs["pk"])
context["posts"] = Posts.objects.filter(user_id = self.kwargs["pk"]).prefetch_related('tags')
そして、ここに私のテンプレートがあります:
{% extends "core/base.html" %}
{% load url from future %}
{% block content %}
<div class="content">
<div class="content-inner">
<div class="story">
<div class="story-left" id="left-story">
<div class="img">
<div>
<img src="https://s3.amazonaws.com/pic-3123/{{profile.pic}}" />
</div>
</div>
<h1>{{ profile.fname }} {{ profile.lname }}</h1>
<p>{{ profile.title }}</p>
<div class="details">
<div>
<span>Points</span>
<p>{{ points.total }}</p>
</div>
{% if profile.city and profile.state %}
<div>
<span><i class="icon-map-marker"></i></span>
<p>{{ profile.city }}, {{ profile.state }}</p>
</div>
{% endif %}
{% if profile.company %}
<div>
<span><i class="icon-briefcase"></i></span>
<p>{{ profile.company }}</p>
</div>
{% endif %}
<div>
<span><i class="icon-time"></i></span>
<p><span class="muted">Joined on</span> {{ profile.dateJoined|date:"M d, Y" }}</p>
</div>
</div>
</div>
<div class="story-right">
<h3>Posts Made</h3>
<div class="tab-content">
{% if posts %}
<ul id="contributionHolder" class="right-ul">
{% for post in posts %}
<li class="content-item" id="post_{{post.id}}">
<h1 class="volk-font"><a href="{% url 'contributions:detail' post.url post.id %}">{{post.title}}</a></h1>
<p class="volk-font limited-text">{{ post.description }}</p>
<div class="tag-holder">
{% for tag in post.tags.all %}
<a class="tag volk-font grey-button-flat" href="">{{tag.name}} </a>
{% endfor %}
</div>
</li>
{% endfor %}
</ul>
{% else %}
<div class="alert"> <button type="button" class="close" data-dismiss="alert">×</button>{{ profile.fname }} has not made any posts.</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}
どんな助けやアイデアも大歓迎です!前もって感謝します。