Django 导入导出,只导出一个对象和相关对象

Django import-export, only export one object with related objects

我有一个表格可以让用户在我们的网站上注册。现在我需要将所有数据导出到 excel,所以我转向了导入导出包。我有 3 个模型,客户、参考和联系人。后两者都与客户有 m2m。我还为这些模型创建了资源。当我在表单视图中的 done() 方法末尾使用 Resource().export() 时,它会导出数据库中的 all 个现有对象,这不是我想要的。

我尝试用谷歌搜索这个,但只得到一个 result, which basically says I need to use before_export(), but I can't find anywhere in the docs 它是如何工作的。

我尝试像这样手动查询我的客户:

customer = Customer.objects.filter(pk=customer.id)

customer_data = CustomerResource().export(customer)

效果很好,但后来我被相关的参考资料和联系人困住了:reference_data = ReferenceResource().export(customer.references) 给我一个 TypeError 说 'ManyRelatedManager' object is not iterable。这是有道理的,因为 export() 需要一个查询集,但我不确定是否可以那样得到它。

非常感谢任何帮助!

一种方法是覆盖 get_queryset(),您可以尝试在单个查询中加载所有相关数据:

class ReferenceResource(resources.ModelResource):

    def __init__(self, customer_id):
        super().__init__()
        self.customer_id = customer_id

    def get_queryset(self):
        qs = Customer.objects.filter(pk=self.customer.id)
        # additional filtering here
        return qs

    class Meta:
        model = Reference
        # add fields as appropriate
        fields = ('id', )

要处理 m2m 关系,您可以修改查询集以添加这些附加字段。

这不是完整的答案,但它可能会帮助您取得进步。