首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-import-export :让post_export更新模型

django-import-export :让post_export更新模型
EN

Stack Overflow用户
提问于 2017-10-10 19:06:10
回答 2查看 1.4K关注 0票数 0

请告诉我如何使用post_export信号更新下面导出的公司模型。我不想导出以前未导出的项目。所以最好的办法就是使用信号。

但是,如果我在下面代码的末尾打印信号中的模型,我会得到一个类型类,例如<class 'app.models.Company'>

我知道我做错了什么,拯救了一个模型,但找不到我周围的路。

也许我不理解here中的django-import-export库的文档。

models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2017-10-10 20:14:03

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

注意,该函数接受一个发送方参数以及通配符关键字参数(**kwargs);所有信号处理程序都必须接受这些参数。

代码语言:javascript
复制
@receiver(post_export, dispatch_uid='ss1')
def _post_export(sender, model, **kwargs):
    model.exported = True
    model.save()

更新: django-import-export不在信号中发送导出的queryset

因此您可以在ModelAdmin中重写export_action

代码语言:javascript
复制
@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
票数 1
EN

Stack Overflow用户

发布于 2018-03-20 08:05:38

АрсенийКраснов解决方案有问题,请在导出之前更新模型,而不是在导出之后。

要在之后导出,必须在resources.ModelResource中添加以下函数

代码语言:javascript
复制
class CompanyResource(resources.ModelResource):
    class Meta:
        model = Company
        fields = ('website', 'user', 'country', 'source', 'industry')

    def after_export(self, queryset, data, *args, **kwargs):
        queryset.update(exported=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46665196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档