2017-10-10 2 views
1

Je remplace les méthodes de la ressource django-import-export. Mais seules les méthodes parentes sont exécutées.Le remplacement de django-import-export ne fonctionne pas

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', ...) 

Je ne suis pas du tout recevoir des instructions d'impression dans la console. L'erreur est lancée directement à partir des méthodes parent. Ils ne devraient pas être exécutés du tout. Ai-je raison ?

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', ...]" 

où les noms de colonnes dans le document Excel étaient « Col1 », « Col2 », ...

Question: Donc, si vous constatez des erreurs dans le code ci-dessus, ils étaient des méthodes mères que je surchargées . Pourquoi sont-ils exécutés? Code Shouldn.tmy être exécuté en imprimant les lignes d'impression dans la console?

+0

vous appelez 'ModelResource' au lieu de' 'ResourceClass' dans votre ModelAdmin' – PRMoureu

+0

@PRMoureu désolé. c'était une faute de frappe –

Répondre

3

Selon documentation, la classe Meta imbriquée n'est pas requise. Ainsi, la classe Admin devrait être comme:

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