繁体   English   中英

尝试在django_tables2中插入带有外部字段列表的新列

[英]Trying to insert a new column with a list of foreign field in django_tables2

我正在使用django_tables2显示“修复详细信息”列表。 到现在为止还挺好。 但是,我想添加一个新字段(不在模型中):服务报告列表。 该关系是一对多。 并显示另一个型号中的序列号。 自从我添加了字段以来,这非常困难,但是render_NEW_FIELD无法正常工作,而且我无法到达服务报告列表,因为在表模型中,我只能访问记录,而不能访问repair_detail模型。 我正在使用django_tables 0.15

维修/ models.py

class RepairDetail(models.Model):
    repair = models.ForeignKey('Repair')
    repair_detail_number = models.IntegerField()
    article_code = models.CharField(max_length=30)
    registered_date = models.DateField(null=True)
    registered_uid = models.IntegerField(null=True)
    registered_initials = models.CharField(max_length=2, null=True)
    customer_reference = models.CharField(max_length=20, null=True)
    db2_recnum = models.IntegerField()

    def __unicode__(self):
        return str(self.repair_detail_number)


class ServiceReport(models.Model):
    repair_detail = models.ForeignKey('RepairDetail')
    status = models.ForeignKey('ServiceReportStatus', on_delete=models.PROTECT)
    serial_number = models.ForeignKey('core.SerialNumber')
    customer = models.ForeignKey('core.Company')
    contact = models.ForeignKey('core.Contact', null=True, on_delete=models.SET_NULL)
    project = models.ForeignKey('core.Project')
    project_code = models.CharField(max_length=4)
    identifier = models.CharField(max_length=1)
    repair_date = models.DateField(null=True)
    repair_uid = models.IntegerField(null=True)
    repair_initials = models.CharField(max_length=2, null=True)
    booking_date = models.DateField(null=True)

核心/ models.py

class SerialNumber(models.Model):
    product = models.ForeignKey("Product")
    panel = models.ForeignKey("Panel", null=True, blank=True, default = None)
    serial_number = models.CharField(max_length=30, default='')
    manifest = models.TextField(null=True)

    def __unicode__(self):
        return self.serial_number

维修/ tables.py

class RepairDetailTable(tables.Table):
    #serials = tables.Column(accessor='servicereport.serialnumber.serialnumber')
    serial = tables.Column()

    def __init__(self, *args, **kwargs):
        super(RepairDetailTable, self).__init__(*args, **kwargs)

    class Meta(object):
        model = RepairDetail
        fields = ('id', 'repair_detail_number', 'article_code', 'registered_date', 'registered_initials', 'customer_reference', 'serials')
        attrs = {'class': 'table table-striped table-bordered protonic'}
        empty_text = "No records found."

如果要(1:N而不是N:1)连接表单元格中的所有相关模型,请尝试通过设置属性在模型层中执行以下操作:

class RepairDetail(models.Model):
    # ...

    @property
    def service_reports_list(self):
        return self.servicereport_set.all()

定义自己的列(inherit tables.Column )并覆盖render方法

将其添加到您的表类中:

class RepairDetailTable(tables.Table):
    # ...
    service_reports_list = YourOwnColumn(some_kwargs)
    # ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM