自定义ModelResource中的字段用于下载数据
Customising fields in ModelResource for downloading data
使用 Django Import/Export library,我目前正在使用以下代码创建一个 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)
当我尝试这个时,下载的结果是空的。
不确定我是否正确地回答了您的问题,但我认为您无法设置 Meta 选项 'dynamic'。
但是,您可以做的是拥有一个抽象基础 class (Resource1) 并从中继承,例如资源2?这是 django 文档的 link:
https://docs.djangoproject.com/en/1.8/topics/db/models/#abstract-base-classes
我找到了一种直接的方法来动态更改 class 实例的内部 class Meta
部分中的字段。下面的 create_resource
函数根据需要创建 class 的自定义版本,然后 returns 一个实例:
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)
使用 Django Import/Export library,我目前正在使用以下代码创建一个 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)
当我尝试这个时,下载的结果是空的。
不确定我是否正确地回答了您的问题,但我认为您无法设置 Meta 选项 'dynamic'。
但是,您可以做的是拥有一个抽象基础 class (Resource1) 并从中继承,例如资源2?这是 django 文档的 link:
https://docs.djangoproject.com/en/1.8/topics/db/models/#abstract-base-classes
我找到了一种直接的方法来动态更改 class 实例的内部 class Meta
部分中的字段。下面的 create_resource
函数根据需要创建 class 的自定义版本,然后 returns 一个实例:
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)