モデルと列名のタプルを取り、モデルの特定の列を表示する汎用テーブルビューを作成しようとしています。私の問題は、内部メタ クラスにあります。
次の 2 つのモデルを想定します。
# models.py
from django.db import models
class Model_a(models.Model):
column_a_1 = models.Field()
column_a_2 = models.Field()
column_a_3 = models.Field()
column_a_4 = models.Field()
column_a_5 = models.Field()
class Model_b(models.Model):
column_b_1 = models.Field()
column_b_2 = models.Field()
column_b_3 = models.Field()
column_b_4 = models.Field()
column_b_5 = models.Field()
目的は、特定の順序でいくつかの列を含む適切なテーブルを生成する単一のビューを作成することです。だから、私はこのような urls.py を持っています:
# urls.py
from django.conf.urls import patterns, url
import myapp.views as myviews
import myapp.models as mymodels
urlpatterns = patterns( '',
url( r'^table_a/$',
myviews.show_table,
{ 'model': mymodels.Model_a,
'columns': ("column_a_1", "column_a_2", "column_a_3") } ),
url( r'^table_b/$',
myviews.show_table,
{ 'model': mymodels.Model_b,
'columns': ("column_b_5", "column_b_2") } ) )
そして、このような単純な views.py :
# views.py
from django.shortcuts import render
from django_tables2 import RequestConfig
import myapp.tables as mytables
def show_table(request, model, columns):
entries = model.objects.all()
table = mytables.ModelTable(entries, model, columns)
RequestConfig(request).configure(table)
return render(request, 'table_view.html', {'dynamic-table': table})
鍵は、tables.py 内の Table サブクラスにあります。
# tables.py
from django_tables2 import import Table
class ModelTable(Table):
class Meta:
pass
def __init__(self, data, model, columns, order_by=None, orderable=None, empty_text=None,
exclude=None, attrs=None, sequence=None, prefix=None,
order_by_field=None, page_field=None, per_page_field=None,
template=None, sortable=None, default=None):
self.Meta.model = model
self.Meta.fields = columns
self.Meta.sequence = columns
super(ModelTable, self).__init__(data, order_by, orderable, empty_text,
exclude, attrs, sequence, prefix,
order_by_field, page_field, per_page_field,
template, sortable, default)
明らかに、Table サブクラス初期化子から Table.Meta の属性を設定する方法がわかりませんでした。奇妙なこと{% render_table dynamic-table %}
に、テンプレートで使用すると、空のテーブルが表示されますが (表示されません)、ページネーターはうまく機能します。
私の間違いはどこですか?