Экспорт данных полей в отношениях "многие ко многим" с помощью django-input-output показывает только первичный ключ
Я пытаюсь экспортировать данные из моей базы данных со страницы администратора django, используя пакет django-import-export. Когда я экспортирую модель, я также хочу показать данные в определенном поле для каждого объекта в отношениях "многие ко многим".
Это выглядит примерно так:
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
<
Если я заменю fields = ('name', 'item__part_number') на fields = ('name', 'item'), появится столбец с названием item, но он будет содержать список первичных ключей, что не поможет. Как я могу экспортировать это, чтобы показать информацию в связанных полях, которые я ищу?
Примечание, я уже делал это раньше, используя внешние ключи, я просто не могу заставить работать поле "многие ко многим". Я не смог найти нигде в документации, показывающей, как представлять различные отношения модели, используя нотацию Дандера.
Если вы хотите, чтобы экспортируемая колонка m2m содержала другое поле, вы можете просто передать имя поля при объявлении 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