删除 python django_tables2 中的重复项

Remove duplication in python 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()

如何remove/reduce复制?

如果它们真的如此相似,您可以编写一个工厂来为您动态创建 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 的实现即可向模型询问正确的值。