Django-tables2:如何使用访问器引入外来列?

时间:2013-12-25 22:03:18

标签: python django django-tables2

我已经尝试过阅读文档和之前的answers这个问题而没有太多运气。

我有一堆学生课程注册,我希望看到一些选定的注册与学生的一些属性相结合。到目前为止没有运气......我会征求你的意见!

以下是模型:

class Student(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    netID = models.CharField(max_length=8)

class Registration(models.Model):
    student = models.ForeignKey(Student)
    course = models.ForeignKey(Course)
    attendance_M = models.BooleanField(default=False)
    attendance_Tu = models.BooleanField(default=False)

这是tables.py:

class AttendanceTable(tables.Table):
    netID = tables.Column(accessor='Student.netID')
    first = tables.Column(accessor='Student.first_name')
    last = tables.Column(accessor='Student.last_name')
    class Meta:
        model = Registration
        attrs = {"class": "paleblue"}
        fields = ('attendance_M', 'attendance_Tu',)
        sequence = ('netID', 'first', 'last', 'attendance_M', 'attendance_Tu',)

虽然我正在获取出勤率值的数据,但学生的外国专栏中没有任何内容。

netID   First   Last    Attendance M    Attendance Tu
 —         —      —      ✔               ✘ 

如果我使用model = Student启动Table并对Registration表使用访问器,这是同样的交易,这是相同的交易。

我觉得我缺少一些非常概念性和关键性的东西 - 请指导我!

2 个答案:

答案 0 :(得分:9)

列的访问者参数中的模型名称应为小写。

使用accessor='student.netID'代替accessor='Student.netID'

答案 1 :(得分:0)

使用 accessor 参数时,您必须使用具有外键的模型中指定的字段名称,然后从该表中选择要使用的字段。

所以,对于这个模型:

#models.py
class Description_M(models.Model):
   id_hash = models.CharField(db_column='Id_hash', primary_key=True, max_length=22)
   description = models.CharField(db_column='Description', max_length=255, blank=True, null=True)

class GeoCodes(models.Model):
    geo = models.CharField(db_column='Geo', primary_key=True, max_length=5)
    city_name = models.CharField(db_column='City', max_length=150, blank=True, null=True)

class RefSources(models.Model):
    id_source   = models.IntegerField(db_column='Id_source', primary_key=True,)  
    source_name   = models.CharField(db_column='Source', max_length=150, blank=True, null=True)  

class Price(models.Model):
    id_hash = models.ForeignKey(Description_M, models.DO_NOTHING, db_column='Id_hash')
    date= models.ForeignKey(DateTime, models.DO_NOTHING, db_column='Date')
    geo = models.ForeignKey(GeoCodes, models.DO_NOTHING, db_column='Geo')
    id_source = models.ForeignKey(RefSources, models.DO_NOTHING, db_column='Id_source')  # Field name made lowercase.
    price = models.FloatField(db_column='Price',primary_key=True, unique=False,default=None)

当使用外键从该表中提取字段时,您必须:

class price_table(tables.Table):
    description = tables.Column(accessor = 'id_hash.description')
    city = tables.Column(accessor = 'geo.city_name')
    source = tables.Column(accessor = 'id_source.source_name')
    class Meta:
        model = Price
        fields = ['date','price']
        sequence = ['description ','date','city ','source','price']
        template_name = 'django_tables2/bootstrap.html'