2016年12月31日土曜日

django-table2 で選択された CheckBox を取得する

sakila をもとに生成した以下のモデルをもとに表を作成する。
class City(models.Model):
    city_id = models.SmallIntegerField(primary_key=True)
    city = models.CharField(max_length=50)
    country = models.ForeignKey('Country')
    last_update = models.DateTimeField()
    objects = CityManager()

    class Meta:
        managed = False
        db_table = 'city'


class Country(models.Model):
    country_id = models.SmallIntegerField(primary_key=True)
    country = models.CharField(max_length=50)
    last_update = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'country'
table として CityTable を以下のように作成する。各行の先頭にチェックボックスを配置する。
このとき、チェックボックスへの accessor は pk としておく。
import django_tables2 as tables


class CityTable(tables.Table):
    ck = tables.CheckBoxColumn(accessor="pk")
    city = tables.Column(accessor="city",
                         verbose_name="都市名",
                         orderable=True,
                         attrs={"th": {"id": "country"}}
                         )
    country = tables.Column(accessor="country.country",
                            verbose_name="国名",
                            orderable=True,
                            attrs={"th": {"id": "country"}}
                            )

    class Meta:
        attrs = {"class": "paleblue"}
チェックがついた行の情報を取得する場合は、対応する view 関数内で request.POST.getlist 関数にて取得する。
なお、取得されるデータは文字列リストの形式となるため、list と map を組み合わせて、数値リストに変換している。
def city_view(request):
    if request.method == "POST":
        pks = list(map(int, request.POST.getlist("ck")))
        ・・・

0 件のコメント:

コメントを投稿