使用 django-input-output 导出多对多关系中的字段数据仅显示主键
Exporting field data in many to many relationships using django-input-output only shows primary key
我正在尝试使用 django-import-export 包从 Django 管理页面导出我的数据库中的数据。当我导出模型时,我还想显示多对多关系中每个 object 的特定字段中的数据。
看起来像这样:
models.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
admin.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,我将得到一个文档,其中一列是所有部件号,另一列是描述。这很好用。但是,我还希望当我导出 Bins 时,一列会显示所有名称,而另一列会显示与该 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
我正在尝试使用 django-import-export 包从 Django 管理页面导出我的数据库中的数据。当我导出模型时,我还想显示多对多关系中每个 object 的特定字段中的数据。
看起来像这样:
models.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
admin.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,我将得到一个文档,其中一列是所有部件号,另一列是描述。这很好用。但是,我还希望当我导出 Bins 时,一列会显示所有名称,而另一列会显示与该 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