Django ImportExport 动态字段

Django ImportExport dynamic fields

我正在使用 Django ImportExport。 我想从名为 Room 的模型中导出所有条目。每个 Room 可以包含一到 m(20 的上限)Table 个。

所以我有以下资源:

class RoomResource(resources.ModelResource):
    table1 = Field()
    table2 = Field()
    # ...
    tableM = Field()  

    class Meta:
        model = Room
        fields = ('table1', 'table2', 'tableM')

    @staticmethod
    def _dehydrate_table(room, table_number):
        if not room.table_number.count() > number - 1:
            return ''
        return getattr(room.table_number.all()[number - 1], 'person_count', '')
    
 
    def dehydrate_table1(self, room):
        return self._dehydrate_table(room, 1)

    def dehydrate_table2(self, instance):
        return self._dehydrate_table(room, 2)

    def dehydrate_tableM(self, instance):
        return self._dehydrate_table(room, M)

这很好用(因为我的 M 的上限为 20)但似乎没有像应该的那样动态求解。

所以我认为我需要做三件事:

1.) 动态设置字段 = (...)

2.) 动态设置 class 属性 tableM = Field()

3.) 动态设置 dehydrate_tableM()。

我尝试通过 __init__ 方法执行此操作,但这会将字段添加到实例字典而不是 class 字典,这不起作用。

那我该如何解决呢?

通过覆盖 def get_fields(self, **kwargs) 解决了它。 在那里你必须找到关系最多的条目并为每个关系添加一个字段:

max_table_count = max([qs.tables.count() for qs in self.get_queryset()])
for current in range(1, max_table_count + 1):
    new_field = Field(column_name=f'Table {current}')
    self.fields[f'table_{current}'] = new_field