【问题标题】:can i make a two dimensional table in django-tables2?我可以在 django-tables2 中制作一个二维表吗?
【发布时间】:2018-10-29 10:20:53
【问题描述】:

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

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')

这是我的桌子:

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')

这就是我想要做的:

【问题讨论】:

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


    【解决方案1】:

    我想我会这样做:

    • 根据需要过滤 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 的值进行排序,因为从数据库中检索到的顺序可能不是所需的演示顺序。

    【讨论】:

    • 您的评论对我很有帮助,但老实说,我无法用状态填充表格。在二维表或数据透视表上拥有一个关于 django tables2 的教程会很有用。我在网上找到的问题多于答案。你的回答是对我帮助最大的一个,问题是我需要更多地学习 django :D
    猜你喜欢
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2012-06-28
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多