使用 Widget Many to many 时导入结果为空。标签确实存在于原始模型中。
见图片。
已导入 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',)
管理员.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)