导入 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
至少如果你能证明它在示例应用程序中工作,那么你就可以尝试调试你的实现。
导入结果为空时使用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
至少如果你能证明它在示例应用程序中工作,那么你就可以尝试调试你的实现。