2017-10-10 2 views
0

S'il vous plaît comment puis-je mis à jour exporté Company modèle ci-dessous en utilisant le signal post_export. Je ne souhaite pas exporter les éléments non exportés auparavant. Donc, la meilleure chose est d'utiliser des signaux.django-import-export: obtenir post_export pour mettre à jour les modèles

Cependant, si j'imprime le modèle dans le signal à la fin du code ci-dessous, je reçois une classe de type, par exemple <class 'app.models.Company'>

Je sais que je fais quelque chose de mal en sauvant un modèle mais ne peut pas trouver mon chemin près.

Peut-être que je ne comprends pas la documentation de la bibliothèque django-import-export qui se trouve here.

models.py

class Company(models.Model): 
    class Meta: 
     verbose_name_plural = "Companies" 

    company_name = models.CharField(max_length=254, blank=True) 
    website = models.URLField(max_length=254, unique=True) 
    address = models.CharField(max_length=254, blank=True, null=True) 
    imported = models.BooleanField(default=False) 
    exported = models.BooleanField(default=False) 
    user = models.ForeignKey(User) 

    def __str__(self): 
     if self.company_name: 
      return self.company_name 
     return self.domain 

admin.py

from django.dispatch import receiver 
from import_export.signals import post_import, post_export 

class CompanyResource(resources.ModelResource): 
    class Meta: 
     model = Company 
     fields = ('website', 'user', 'country', 'source', 'industry') 

@admin.register(Company) 
class CompanyAmin(ImportExportModelAdmin): 
    resource_class = CompanyResource 
    list_display = ('domain', 'website', 'exported', 'added_on') 
    list_filter = ('user', 'country', 'imported', 'exported', 'added_on') 


@receiver(post_export, dispatch_uid='ss1') 
def _post_export(model, **kwargs): 
    print(model) 
    model.exported = True 
    model.save() # This line when included raises Error: "save() missing 1 required positional argument: 'self'" so code breaks here 

Répondre

0

https://docs.djangoproject.com/en/1.11/topics/signals/#connecting-receiver-functions

Notez que la fonction prend un argument de l'expéditeur, ainsi que des arguments de mots clés génériques (** kwargs) tous les gestionnaires de signaux doivent prendre ces arguments .

@receiver(post_export, dispatch_uid='ss1') 
def _post_export(sender, model, **kwargs): 
    model.exported = True 
    model.save() 

À JOUR: django-import-export ne pas envoyer exporté queryset dans le signal

si u peut passer outre export_action dans ModelAdmin

@admin.register(Company) 
class CompanyAmin(ImportExportModelAdmin): 
    resource_class = CompanyResource 
    list_display = ('domain', 'website', 'exported', 'added_on') 
    list_filter = ('user', 'country', 'imported', 'exported', 'added_on') 

    def export_action(self, request, *args, **kwargs): 
     response = super().export_action(request, *args, **kwargs) 
     qs = self.get_export_queryset(request) 
     qs.update(exported=True) 
     return response 
+0

Le django-import-export n » t spécifiez ceci dans la documentation. Aussi dans le code source que j'ai vérifié expéditeur est Aucun – codelove

+0

juste ignorer l'expéditeur –

+0

Merci cela résolu mon problème – codelove