python - 在导入到 Django 之前将值更改为小写
问题描述
我正在使用 Django Import-Export 将数据从 excel(xlsx) 文件导入到我的 Django 模型中。我有什么工作,但我希望它考虑具有不同大小写的字符的字符串是相同的。目前,如果我在列中有“黑色安息日”和“黑色安息日”,则导入会认为它们是不同的艺术家。
是否可以在导入过程中将所有字符串值更改为小写?或者以某种方式配置 Django 以将它们视为相同?
资源.py
class ArtistResource(resources.ModelResource):
class Meta:
model = Artist
import_id_fields = ('artist',)
skip_unchanged = True
模型.py
class Artist(models.Model):
artist = models.CharField(primary_key=True, unique=True, max_length=30)
def __str__(self):
return self.artist
管理员.py
class ArtistAdmin(ImportExportActionModelAdmin):
resource_class = ArtistResource
解决方案
是的,文档中对此进行了描述:
待导入数据集的每一行都按照以下步骤进行处理:
- 调用 before_import_row() 挂钩以允许在导入行数据之前对其进行修改
- get_or_init_instance() 使用当前 BaseInstanceLoader 和数据集的当前行调用,返回一个对象和一个布尔值,声明该对象是否是新创建的。
因此,您必须在 中执行此操作before_import_row()
,因为如果您稍后执行此操作,get_or_init_instance()
将为您创建一个行。