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 关系,您可以修改查询集以添加这些附加字段。
这不是完整的答案,但它可能会帮助您取得进步。
我有一个表格可以让用户在我们的网站上注册。现在我需要将所有数据导出到 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 关系,您可以修改查询集以添加这些附加字段。
这不是完整的答案,但它可能会帮助您取得进步。