1

Django Import/Export ライブラリを使用して、現在、次のコードを使用して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

あなたの質問を正しく理解できたかどうかはわかりませんが、メタ オプションを「動的」にできるとは思いません。

ただし、抽象基本クラス (Resource1) を持ち、それを継承して Resource2 などにすることはできますか? django ドキュメントへのリンクは次のとおりです。

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

于 2015-09-23T13:30:19.280 に答える