2015-09-23 4 views
0

Использование Django Import/Export library. В настоящее время я использую следующий код для создания resource, который может использоваться для загрузки данных из проекта Django в нескольких форматах (например, csv, excel, json и т. Д.). :Пользовательские поля в ModelResource для загрузки данных

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) 

Когда я попробую это, итоговая загрузка пуста.

ответ

0

Я нашел прямой способ динамически изменять поля, которые находятся в пределах внутренней 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) 
1

Не уверен, что у меня есть вопрос правильно, но я не думаю, что вы можете сделать мета-параметры «динамическими».

Однако, что вы могли бы сделать, это иметь абстрактный базовый класс (Resource1) и наследовать от него, например. Resource2? Вот ссылка на Джанго документы:

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

+0

Я не думаю, что это поможет - Мне нужно, чтобы пользователь мог изменить, какие поля включены во время выполнения – isedwards

 Смежные вопросы

  • Нет связанных вопросов^_^