我正在使用Django Import-Export将数据从excel(xlsx(文件导入到我的Django模型中。 我所拥有的有效,但我希望它考虑具有不同大小写的字符的字符串是相同的。目前,如果我在一列中有"黑色安息日"和"黑色安息日",导入会认为他们是不同的艺术家。
是否可以在导入过程中将所有字符串值更改为小写?或者以某种方式配置 Django 以将它们视为相同?
resources.py
class ArtistResource(resources.ModelResource):
class Meta:
model = Artist
import_id_fields = ('artist',)
skip_unchanged = True
models.py
class Artist(models.Model):
artist = models.CharField(primary_key=True, unique=True, max_length=30)
def __str__(self):
return self.artist
admin.py
class ArtistAdmin(ImportExportActionModelAdmin):
resource_class = ArtistResource
是的,文档中对此进行了描述:
待导入数据集的每一行都按照以下步骤进行处理:
- 调用 before_import_row(( 钩子以允许在导入行数据之前对其进行修改
- get_or_init_instance(( 与当前 BaseInstanceLoader 和数据集的当前行一起调用,返回一个对象和一个布尔值,声明该对象是否是新创建的。
所以你必须这样做before_import_row()
,因为如果你以后这样做,get_or_init_instance()
会为你创建一个行。
对于任何可能想要我的解决方案的未来读者。
class ArtistResource(resources.ModelResource):
class Meta:
model = Artist
import_id_fields = ('artist',)
skip_unchanged = True
def before_import_row(self, row, **kwargs):
row['artist'] = row['artist'].lower()