6

Django import_exportを使用して、管理ページに CSV アップロードを実装しています。これで、外部キー列を含む 1 つのモデルができましたが、外部キー列にはインポートごとに 1 つの値しかありません。したがって、ユーザーが列自体を強制的に追加するのではなく、関連するモデル インスタンスをドロップダウンから選択できるようにしたいと考えています。これを行うには、インポート フォームをカスタマイズする必要があります。これには、既定のメソッドimport_actionとをオーバーライドする必要がありますprocess_importが、これまでの努力は効果を示していません。これが私がこれまでに持っているものです:

from django import forms
from import_export.forms import ImportForm  
from .models import MyModel, RelatedModel

class CustomImportForm(ImportForm):
    """Add a model choice field for a given model to the standard form."""
    appended_instance = forms.ModelChoiceField(queryset=None)

    def __init__(self, choice_model, import_formats, *args, **kwargs):
        super(CustomImportForm, self).__init__(import_formats, *args, **kwargs)
        self.fields['appended_instance'].queryset = choice_model.objects.all()

@admin.register(MyModel)
class MyModelAdmin(ImportExportModelAdmin):
    resource_class = SomeResource


    def import_action(self, request, *args, **kwargs):
        super().import_action(self, request, *args, **kwargs)
        form = CustomImportForm(RelatedModel, 
                                import_formats,
                                request.POST or None,
                                request.FILES or None)

インポート ページに移動すると、 が取得され、ローカル varsで実際にクラスであるAttributeError MyModelAdmin has no attribute 'POST'ことがわかります。request objectMyModelAdmin

4

3 に答える 3

1

これは古い投稿ですが、import_action をオーバーライドする方法を調べているときに、これに遭遇しました。あなたのエラーはここにあります: super().import_action(self, request, *args, **kwargs)

self なしで呼び出す必要があります。

super().import_action(request, *args, **kwargs)

または古いpythonの場合:

super(MyModelAdmin, self).import_action(request, *args, **kwargs)

于 2016-06-29T10:53:47.377 に答える