まず、pip で django-tables2 をインストールする。
pip install django-tables2model内に格納されたデータを出力するには、対応するtableクラスを作成する。
以下の User クラスのデータを出力する。
[model.py]
class Organization(models.Model):
organization_id = models.CharField(max_length=5)
name = models.CharField(max_length=20)
class User(models.Model):
staff_id = models.CharField(max_length=7)
name = models.CharField(max_length=15)
organization = models.ForeignKey(Organization)
まず、出力項目を管理する django_tables2.Table より派生したクラスを作成する。
[tables.py]
import django_tables2 as tables
class UserTable(tables.Table):
staff_id = tables.Column(accessor="staff_id",
verbose_name="STAFF ID",
order_by=("staff_id"))
name = tables.Column(accessor="name",
verbose_name="USER NAME",
order_by=("name"))
organization = tables.Column(accessor="organization.name",
verbose_name="ORGANIZATION",
order_by=("organization.organization_id"))
class Meta:
attrs = {"class": "paleblue"}
上に記載した Column の引数を説明する。accessor は、該当項目のデータを管理している model 項目の名称となる。
テーブル内の項目名と一致している場合は省略可能である。
特に外部参照している場合、"参照先.項目名"とする必要がある。
verbose_name は、表上に出力される項目名称である。
また、order_by は、表上のソートボタンを押下された際、何に基づいてソートするかを定義するものである。
当該項目についても、外部参照している場合は、"参照先.項目名"とする必要がある。
表を表示する views.py の例を記載する。
表示対象となるデータを取得する。以下の例では、all によりすべてのデータを取得対象としているが、filter により選択することも可能である。
[views.py]
from django.shortcuts render
from models import User
from tables import UsetTable
from django_tables2.config import RequestConfig
def create_table(request):
users = User.objects.all()
table = UserTable(users)
RequestConfig(request).configure(table)
return render(request, "people.html", {"table": table})
適当な url により、create_table を呼び出せば、ソート可能な表が出力される。

0 件のコメント:
コメントを投稿