我正试图使用django导入导出包从django管理页面导出数据库中的数据。导出模型时,我还希望在多对多关系中的每个对象的特定字段中显示数据。
它看起来像这样:
型号.py
class Item(models.Model):
part_number = models.CharField(max_length=50, unique=True)
description = models.CharField(max_length=250, blank=True)
def __str__(self):
return self.part_number
class Bin(models.Model):
name = models.CharField(max_length=50, unique=True)
items = models.ManyToManyField(Item, blank=True)
def __str__(self):
return self.name
管理员.py
class ItemResource(ModelResource):
class Meta:
model = Item
fields = ('part_number', 'description')
@admin.register(Item)
class ItemAdmin(ImportExportModelAdmin):
save_as = True
resource_class = ItemResource
class BinResource(ModelResource):
class Meta:
model = Bin
fields = ('name', 'item__part_number')
@admin.register(Item)
class ItemAdmin(ImportExportModelAdmin):
save_as = True
resource_class = BinResource
我希望这样做的方式是,如果我导出Items,我会得到一个文档,其中所有的零件号都在一列中,描述都在另一列中。这很好用。但是,我也希望在导出bin时,一列会显示所有名称,另一列则会显示与该bin关联的项目的所有零件号列表。我实际得到的是一个名为part_number的列,但其中任何一列都没有。
如果我用fields = ('name', 'item')
替换fields = ('name', 'item__part_number')
,会有一个标题为item的列,但它会包含主键列表,这没有帮助。如何将其导出以显示我正在查找的相关字段中的信息?
注意,我在使用外键之前已经这样做了,我只是无法让多对多字段工作。我在文档中找不到任何显示如何使用dunder表示法表示各种模型关系的地方。
如果您希望导出的m2m列包含不同的字段,您可以在字段上声明ManyToManyWidget
时简单地传递字段的名称。
例如:
from import_export.widgets import ManyToManyWidget
class BinResource(ModelResource):
item = Field(
attribute='item',
widget=ManyToManyWidget(Category, field='part_number',
separator='|')
)
class Meta:
model = Bin
fields = ('name', 'item')
这将导致part_number
显示在导出列中,而不是id
,例如:
name,item
name1,part1|part2