1

使用 Django导入/导出库,我目前正在使用以下代码创建一个resource可用于从 Django 项目中以多种格式(例如 csv、excel、json 等)下载数据的代码:

from import_export import resources

class Resource1(resources.ModelResource):
    class Meta:
        model = Person
        fields = ('First_Name', 'Last_Name')

resource = Resource1()
dataset = resource.export(queryset)

我现在正在创建具有不同属性(例如不同字段)的多个版本的资源。是否可以动态更改 Meta(或 _meta),以便使用所需的属性创建它?

class Resource2(resources.ModelResource):
    def __init__(self, fields):
        self.Meta.fields = fields
        # self._meta.fields = fields
    class Meta:
        model = Person

resource = Resource2(['First_Name', 'Last_Name', 'Address'])
dataset = resource.export(queryset)

当我尝试这个时,生成的下载是空的。

4

2 回答 2

3

我找到了一种直接的方法来动态更改class Meta类实例内部的字段。下面的create_resource函数按需创建类的自定义版本,然后返回一个实例:

def create_resource(django_model, model_fields):
    class model_resource(resources.ModelResource):
        class Meta:
           model = django_model
           fields = model_fields
    return model_resource()

resource = create_resource(Person, ['First_Name', 'Last_Name', 'Address'])

然后我可以使用该资源导出数据:

dataset = resource.export(queryset)
于 2015-09-23T19:23:47.087 回答
1

不确定我是否正确地回答了您的问题,但我认为您不能将 Meta 选项设置为“动态”。

但是,您可以做的是拥有一个抽象基类 (Resource1) 并从它继承例如 Resource2?这是 django 文档的链接:

https://docs.djangoproject.com/en/1.8/topics/db/models/#abstract-base-classes

于 2015-09-23T13:30:19.280 回答