删除python django_tables2中的重复项

时间:2017-07-02 12:44:06

标签: python django django-tables2

我使用的是django_tables2,并且最终得到了以下两个几乎完全相同的表:

class UserMapsetTable(Table):

    edit = ButtonColumn('Edit', 'mapsets_users_edit')
    mappings = ButtonColumn('Mappings', 'mapsets_users_mappings')

    class Meta:
        model = UserMappingRuleSet
        fields = (
            'name', 
            'notes'
        )
        attrs = responsive_table_attrs()


class ReadingMapsetTable(Table):

    edit = ButtonColumn('Edit', 'mapsets_readings_edit')
    mappings = ButtonColumn('Mappings', 'mapsets_readings_mappings')

    class Meta:
        model = ReadingMappingRuleSet
        fields = (
            'name', 
            'notes'
        )
        attrs = responsive_table_attrs()

如何删除/减少重复?

1 个答案:

答案 0 :(得分:1)

如果他们真的很相似,你可以写一个工厂为你动态创建Table课程:

def table_factory(Model, name):
    class Table(tables.Table)

        edit = ButtonColumn('Edit', 'mapsets_' + name + '_edit')
        mappings = ButtonColumn('Mappings', 'mapsets_' + name + '_mappings')

        class Meta:
            model = Model
            fields = (
                'name', 
                'notes'
            )
            attrs = responsive_table_attrs()
    return Table

UserMapsetTable = table_factory(UserMappingRuleSet, 'users')
ReadingMapsetTable = table_factory(ReadingMapRuleSet, 'readings')

在这个例子中,我不建议这样做。您可能需要稍后更改两个表中的一个,这将是PITA。

另一种方法是在模型上使用某种方法为mapset_{}_edit返回正确的值。然后,您可以更改ButtonColumn的实现,以向模型询问正确的值。