2017-07-02 51 views
0

我使用django_tables2刪除重複數據刪除,並結束了與下面兩個表這是幾乎相同的:在python 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

兩者都是不同的型號。那麼你想要做什麼呢? –

+0

查看https://code.djangoproject.com/wiki/DynamicModels –

+0

@ArpitSolanki這些是不同的模型,但你可以看到,他們有相似之處。我試圖提取公共部分,這是DRY編程的基礎。我已經完成了這些視圖和模板,但表格部分卻很困難。 – andyhasit

回答

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的實施情況,向模型詢問正確的值。

+0

太棒了,謝謝。我一直都在用js做這種類型的工作,但並沒有想到在Python中嘗試它。我聽到你的警告,但在這種情況下,這些表應被視爲相同。 – andyhasit