Django Tables2显示多个表

时间:2016-09-21 14:25:06

标签: python django django-tables2

我的用户记录中包含相关(ish)课程和注册记录。我想点击一个用户,在同一页面中查看用户表,课程表和注册表中的原始数据。

当我尝试渲染表时,该过程会中断。

views.py:

def explore_related(request, client_id, user_id):
    client = get_object_or_404(Client, pk=client_id)

    users = Users.objects.filter(pk=user_id)

    enrollments = Enrollments.objects.filter(client_id=client_id).filter(userID__in=users.values_list('userID', flat=True)).all()

    courses = Courses.objects.filter(client_id=client_id).filter(sectionSchoolCode__in=enrollments.values_list('sectionSchoolCode', flat=True)).all()

    userTable = UserTable(users, prefix='u_')

    courseTable = CourseTable(courses, prefix='c_')

    enrollmentTable = EnrollmentTable(enrollments, prefix='e_')

    payload = {
        'userTable': userTable,
        'enrollmentTable': enrollmentTable,
        'courseTable': courseTable,
    }

    return render(request, 'importer/explore_related.html', payload)

explore_related.html:

{% load render_table from django_tables2 %}
<html>
    <body>
        {% render_table userTable %}
        <br>
        {% render_table courseTable %}
        <br>
        {% render_table enrollmentTable %}
    </body>
</html>

tables.py

class UserTable(tables.Table):
    selection = tables.CheckBoxColumn(accessor='userID', orderable=False)
    errors = tables.Column()
    User_ID = tables.LinkColumn(
        'importer:explore_related',
        text=lambda record: record.userID,
        kwargs={
            'client_id': tables.A('client_id'),
            'file_kind': 'user',
            'object_id': tables.A('id'),
        },
        empty_values='NULL',

    )

    class Meta:
        model = Users
        attrs = {'class': 'paleblue'}
        exclude = ['id', 'client', 'userID']

        sequence = (
            'selection',
            '...',
            'errors'
        )


class CourseTable(tables.Table):
    selection = tables.CheckBoxColumn(accessor='pk', orderable=False)
    errors = tables.Column()

    class Meta:
        model = Courses
        attrs = {'class': 'paleblue'}
        exclude = ['id', 'client']

        sequence = (
            'selection',
            '...',
            'errors'
        )


class EnrollmentTable(tables.Table):
    selection = tables.CheckBoxColumn(accessor='pk', orderable=False)
    errors = tables.Column()

    class Meta:
        model = Enrollments
        attrs = {'class': 'paleblue'}
        exclude = ['id', 'client']

        sequence = (
            'selection',
            '...',
            'errors'
        )

1 个答案:

答案 0 :(得分:0)

如果您使用自定义表类,则需要使用 RequestConfig 对象来正确设置表。

在您的示例中,添加

应该足够了
RequestConfig(request, paginate=False).configure(userTable)
RequestConfig(request, paginate=False).configure(courseTable)
RequestConfig(request, paginate=False).configure(enrollmentTable)

将它们添加到有效负载之前。