2017-10-10 37 views
1

djangoインポートエクスポートのリソースメソッドをオーバーライドしています。しかし、親メソッドだけが実行されます。djangoインポートエクスポートのオーバーライドが機能しない

models.py

class Model(models.Model): 
    modelField1 = models.CharField(
    modelField2... 
    modelField3... 

admin.py

class ModelResource(resources.ModelResource): 

    def before_import(self, dataset, using_transactions, dry_run, **kwargs): 
     print("INside BEfore IMport") 
     dataset.headers = ('modelField1', 'modelField2', ...) 
     del dataset[0] 

    def get_instance(self, instance_loader, row): 
     print("Inside get instance") 
     return False 

    def get_or_init_instance(self, instance_loader, row): 
     print("INside Get or init") 
     instance = self.get_instance(instance_loader, row) 
     if instance: 
      return (instance, False) 
     else: 
      return (self.init_instance(row), True) 

@admin.register(Model) 
class ModelAdmin(ImportExportModelAdmin): 
    class Meta: 
     model = MOdel 
     resource_class = ModelResource 
     list_display = ('modelField1', 'modelField2', ...) 
     search_fields = ('modelField1', 'modelField2', ...) 

私はまったくコンソールにprint文を取得しておりません。エラーは親メソッドから直接スローされます。彼らはまったく処刑されるべきではありません。私は正しい?

Excelドキュメントの列名は...「のCol1」、「Col2に」だった

質問

Line number: 1 - u"Column 'id' not found in dataset. Available columns are: [u'Col1', u'Col2', u'Col2', ...]" 
Traceback (most recent call last): 
File "/home/aswin/projects/mastercityenv/local/lib/python2.7/site-packages/import_export/resources.py", line 434, in import_row 
instance, new = self.get_or_init_instance(instance_loader, row) 
File "/home/aswin/projects/mastercityenv/local/lib/python2.7/site-packages/import_export/resources.py", line 258, in get_or_init_instance 
instance = self.get_instance(instance_loader, row) 
File "/home/aswin/projects/mastercityenv/local/lib/python2.7/site-packages/import_export/resources.py", line 252, in get_instance 
return instance_loader.get_instance(row) 
File "/home/aswin/projects/mastercityenv/local/lib/python2.7/site-packages/import_export/instance_loaders.py", line 32, in get_instance 
params[field.attribute] = field.clean(row) 
File "/home/aswin/projects/mastercityenv/local/lib/python2.7/site-packages/import_export/fields.py", line 63, in clean 
list(data.keys()))) 
KeyError: u"Column 'id' not found in dataset. Available columns are: [u'Col1', u'Col2', u'Col2', ...]" 

:だから、あなたは上記のコードでエラーを注意している場合、彼らは私がオーバーロードされた親メソッドからのものでした。彼らはなぜ実行されますか?コンソールの印刷行を印刷するかどうか

+0

あなたは申し訳ありません、あなたの 'ModelAdmin' – PRMoureu

+0

@PRMoureuで代わりに' ResourceClass'の 'ModelResource'を呼んでいます。それはタイプミスでした –

答えて

3

documentationに従って、ネストされたMetaクラスは必須ではありません。だから、管理者クラスは次のようにする必要があります:

@admin.register(Model) 
class ModelAdmin(ImportExportModelAdmin): 
    resource_class = ModelResource 
    list_display = ('modelField1', 'modelField2', ...) 
    search_fields = ('modelField1', 'modelField2', ...) 
関連する問題