删除 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
的实现即可向模型询问正确的值。
我正在使用 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
的实现即可向模型询问正确的值。