jQueryテーブルソーターを使用しているため、ページ付けしたくない大量のデータを表示する必要がありPerson.objects.all()
ます。ビューでの使用は、データベースにとって非常にコストがかかります。ロードに時間がかかりすぎるため、ビューで生のSQLを実行しようとしています。
objects.all()
Djangoの一般的なビューを使用してみましたが、メソッドと同じくらい低速でした。
これが私のモデルです。var1
基本的に、私はすべての人を、たとえば、またはに登場した回数を数えながら表示したいと思いますvar2
。
class Person(models.Model):
name = models.CharField(max_length=64, blank=True, null=True)
last_name = models.CharField(max_length=64,)
slug = models.SlugField()
class Object(models.Model):
title = models.ForeignKey(Title)
number = models.CharField(max_length=20)
var1 = models.ManyToManyField(Person, related_name="var1_apps", blank=True, null=True)
var2 = models.ManyToManyField(Person, related_name="var2_apps", blank=True, null=True)
var3 = models.ManyToManyField(Person, related_name="var3_apps", blank=True, null=True)
# ...
slug = models.SlugField()
from django.db import connection
def test (request):
cursor = connection.cursor()
cursor.execute('SELECT * FROM objects_person')
persons = cursor.fetchall() # fetchall() may not be the right call here?
return render_to_response('test.html', {'persons':persons}, context_instance=RequestContext(request))
レンプレート:
<table class="table tablesorter">
<thead>
<tr>
<th>Name</th>
<th>Var1</th>
<th>Var2</th>
<th>Var3</th>
</tr>
</thead>
<tbody>
{% for person in persons %}
<tr>
<td><a href="{{ person.get_absolute_url }}">{{ person.last_name }}{% if person.name %}, {{ person.name }}{% endif %}</a></td>
<td>{{ person.var1_apps.count }}</td>
<td>{{ person.var2_apps.count }}</td>
<td>{{ person.var3_apps.count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
何をするのかは空白行を繰り返しますが、呼び出すだけ{{ creator }}
でSQLテーブル全体が表示されます-これは必要ありません。私はクエリで何か間違ったことをしているに違いないので、助けていただければ幸いです。