python - 我可以在 django-tables2 中制作二维表吗?

标签 python django html-table django-templates django-tables2

编辑: 大家好,我几天来一直在寻找问题的解决方案,但没有答案 我正在尝试使用从同一模型获得的数据制作一个二维表。 这个想法是将学生按行列出,数据按列列出,状态在各自的单元格中列出,这是一个二维表。

class DailyAttendanceStudent(models.Model):
    ATTENDANCE_CHOICES = (
        (None,''),
        (True,'Presente'),
        (False, 'Ausente')
        )
    date = models.DateField(default=datetime.datetime.now)
    status = models.NullBooleanField(choices=ATTENDANCE_CHOICES)
    student = models.ForeignKey('perfiles.Student')

这些是我的 table :

class StudentAttendanceTable(tables.Table):
    nombres = tables.Column('nombres', accessor='Student.first_name')
    apellidos = tables.Column('apellidos', accessor='Student.last_name')
    date = tables.Column('fecha', accessor='date')#LinkColumn
    status = tables.Column('status', accessor='status')
    class Meta:
        model = DailyAttendanceStudent
        fields = ('nombres', 'apellidos', 'date', 'status')

从图形上看,这就是我想要做的:

I want to do this

最佳答案

我想我会做这样的事情:

  • 根据需要过滤 DailyAttendanceStudent 查询集,并将其传递到您的表。
  • 为您的表实现自定义构造函数,执行如下操作:
    • 循环查询集,将其转换为 OrderedDict以用户 ID 作为键。对于任何新日期,您应该向实例添加一个新列,并将该日期的键添加到 OrderedDict。
    • 新列可以是table.Column,也可以是专门满足您需求的列。
    • 自定义构造函数应调用父类的构造函数,将 OrderedDict 的项目作为数据传递,将日期列作为 extra_columns 传递。

在代码中,它可能如下所示:

from collections import OrderedDict
import django_tables2 as tables

class StudentAttendanceTable(tables.Table):
    nombres = tables.Column('nombres', accessor='student.first_name')
    apellidos = tables.Column('apellidos', accessor='student.last_name')

    def __init__(self, data, *args, **kwargs):
        rows = OrderedDict()
        extra_columns = {}
        for row in data:
            if row.student.id not in rows:
                rows[row.student.id] = {'student': row.student}
            rows[row.student.id][row.date] = row.status
            extra_columns[row.date.isoformat()] = tables.Column()  # use more specialized column if you get this to work
        super(StudentAttendanceTable, self).__init__(data=rows.values(), extra_columns=extra_columns.items(), *args, **kwargs)

您可能想要对传递给 extra_columns 的值进行排序,因为从数据库检索到的顺序可能不是所需的呈现顺序。

关于python - 我可以在 django-tables2 中制作二维表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50420401/

相关文章:

python - NameError:设置更改为mysql后未定义名称 '_mysql'

python - Django:如何检查用户名是否已经存在?

javascript - 在 javascript 上生成带有图像的表格

python - 准备好的语句和不正确的参数数量

python - Matplotlib 挑战 - 改变等高线图中的线条样式

python - 使用 Python Joblib 的双并行循环

javascript - Django-autocomplete-light如何从html获取数据?

python - 在数据框中创建新列时将缺失值留空

javascript - 使用javascript单击编辑按钮时如何使行可编辑?

javascript - 查找带有特定文本的 td,并在该文本之后立即对 td 进行操作?