导入 M2M 导入的空值

Import M2M Empty values imported

导入结果为空时使用Widget Many to many。 标签确实存在于原始模型中。

见图。

import result

Excel进口

| provider  | tag             | provider_tag_id |
|-----------|-----------------|-----------------|
| Lionsgate | Planes, Top     |                 |
| FOX       | Houses, Low     |                 |
| Dorcel    | something, else |                 |

m2m 指向的模型

class Tag(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=250, unique=True)

    def __str__(self):
        return self.name

m2m 关系的模型

class ProviderTag(models.Model):
    provider_tag_id = models.AutoField(primary_key=True)
    provider = models.ForeignKey(Provider, on_delete=models.DO_NOTHING)
    tags = models.ManyToManyField(Tag)

要导入的资源

class ProviderTagResource(resources.ModelResource):

provider = fields.Field(
    column_name='provider',
    attribute='provider',
    widget=ForeignKeyWidget(Provider, 'name')
)
tags = fields.Field(
    column_name='tags',
    attribute='tags',
    widget=ManyToManyWidget(Tag, separator=',', field='name')
)

class Meta():
    model = ProviderTag
    fields = ('provider', 'tags', 'provider_tag_id',)
    import_id_fields = ('provider_tag_id',)

Admin.py

 class ProviderTagAdmin(ImportExportModelAdmin):
    list_display = ('provider', 'get_tags', 'provider_tag_id')
    search_fields = ['provider',]
    resource_class = ProviderTagResource

    def get_tags(self, obj):
        print(obj.tags)
        return ", ".join([str(p) for p in obj.tags.all()])
admin.site.register(ProviderTag, ProviderTagAdmin)

我无法提供直接答案,但我的建议是获取 example application 运行.

您可以轻松测试导入 m2m 字段。您必须在 core/admin.py 文件中的 BookResource 上定义一个 m2m 字段:

class BookResource(ModelResource):
    categories = fields.Field(
        attribute='categories',
        widget=widgets.ManyToManyWidget(Category, field='name',
                                        separator='|')
    )

    class Meta:
        model = Book

然后您可以导入示例文件,例如:

id,name,author,author_email,imported,published,published_time,price,categories
1,book1,,email@example.com,0,2020-07-21,,10.25,Category1|Category2

至少如果你能证明它在示例应用程序中工作,那么你就可以尝试调试你的实现。