私はdjango-tables(http://pypi.python.org/pypi/django-tables/0.2)を使ってMySQLテーブルの内容をレンダリングしています。Django:django_tablesはメソッドをソート
テーブルにマップされるモデルには、変換関数である2つの関数、または行の内容の集計があります。例えば
:
class Example(models.Model):
STATUS_1 = 0
STATUS_2 = 1
STATUS_3 = 2
STATUS_CHOICES = (
(STATUS_1, _('Status One')),
(STATUS_2, _('Status Two')),
(STATUS_3, _('Status Three')),
)
#This gives a nice drop down when rendered in a form...
status = models.IntegerField(choices=STATUS_CHOICES,
default=STATUS_1,
verbose_name=_('Status'))
#This is the function to produce the text for a choice...
def status_text(self):
return self.STATUS_CHOICES[self.status][1]
#A function that inspects items that link to 'Example'
#and creates an aggregate string value
def openissues(self):
answer = _("No")
linked_issues = self.issues.all()
for thisissue in linked_issues:
if (not thisissues.resolved):
answer = _("Yes")
break
return answer
は、その後、私は持っている私のテーブルのクラス定義で:
import django_tables
from django.utils.translation import ugettext_lazy as _
class ExampleTable(django_tables.ModelTable):
.
.
status_text = django_tables.Column(verbose_name=_('Status'))
openissues = django_tables.Column(verbose_name=_('Open Issues'))
.
.
私の見解は次のように構築されています:
def decision_list(request):
.
.
objects = Example.objects.all()
table = ExampleTable(objects, order_by=request.GET.get('sort'))
return render_to_response('example_list.html',
RequestContext(request, dict(example=example)))
そして最後に、テンプレートがどのように見えますこれは:
<table id="example-list" cellspacing="0">
<tr>
{% for column in example.columns %}
<th id="{{ example.name }}"{% if example.is_ordered_straight %} class="sorted straight"{% endif %}{% if column.is_ordered_reverse %} class="sorted reverse"{% endif %}><a href="?sort={{ column.name_toggled }}">{{ column }}</a></th>
{% endfor %}
</tr>
{% for thisexample in example.rows %}
<tr>
<td>{{ thisexample.id }}</td>
<td><a href="{% url a_url %}">{{thisexample.name}}</a></td>
<td>{{ thisexample.status_text }}</td>
<td>{{ thisexample.openissues }}</td>
</tr>
{% endfor %}
</table>
(注:私は唯一の関連する部分を含むように、コードビットを編集した、そして理解しやすいかもしれませんので、より汎用的なものを名前を変更)あなたがうまくいけば、私が欲しい見ることができるように、
とにかくユーザーが列見出しをクリックすると、 'status_text()'と 'openissues()'メソッドをソートできるようになりました。
これは機能しません。 django_tablesため
ドキュメントは言う:
「カスタムカラムは関係なく、
sortable
財産(それは無視される)の、順序をサポートしていないモデルフィールドに基づいていません。」
ユーザーがモデル関数をソートできる方法はありますか?これは、多くの人々がやりたいと思うようなものです。