使用django输入输出导出多对多关系中的字段数据只显示主键



我正试图使用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

最新更新