Экспорт данных полей в отношениях "многие ко многим" с помощью 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
Вернуться на верх