使用django_tables2将两列合并为一列

时间:2016-03-15 00:47:21

标签: python django django-tables2

我在django_tables2中有以下表格:

class CustomerTable(tables.Table):
    class Meta:
        model = Customer
        attrs = {'class': 'table'}
        fields = {'lastname', 'firstname', 'businessname', 'entrydate'}

我的客户模型有firstnamelastname字段。

我想要的是让一个名称列填充'lastname'+', '+firstname'之类的内容,以便它显示姓氏,姓名可以排序的姓氏。

The docs表明这是可能的,但它没有提供将现有数据重新用于新列的工作示例。只是改变现有数据。

我如何将这两个字段合并为一个列?

2 个答案:

答案 0 :(得分:0)

像这样更新您的模型:

class Customer(models.Model):
    # Fields

    @property
    def full_name(self):
        return '{0} {1}'.format(self.first_name, self.last_name)

并更新您的Table类:

class CustomerTable(tables.Table):
    full_name = tables.Column(accessor='full_name', verbose_name='Full Name')
    class Meta:
        model = Customer
        attrs = {'class': 'table'}
        fields = {'lastname', 'firstname', 'businessname', 'entrydate', 'full_name'}

答案 1 :(得分:0)

我找到了一种无需在模型中添加其他属性即可完成此操作的方法。

使用第一个字段作为访问器,并将第二个部分格式化为render_()方法。顺序应该可以,因为您呈现的值是姓氏。

class CustomerTable(tables.Table):

    lastname = tables.Column(verbose_name="Lastname, Firstname")

    class Meta:
        model = Customer
        attrs = {'class': 'table'}
        fields = {'lastname', 'businessname', 'entrydate'}

    render_lastname(self, record, value):
        return mark_safe(f"{value}, {record.firstname}")