我使用的是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()
如何删除/减少重复?
答案 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
的实现,以向模型询问正确的值。