首页 > 解决方案 > 在导入到 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

标签: pythondjangoexcelimportcase

解决方案


是的,文档中对此进行了描述:

待导入数据集的每一行都按照以下步骤进行处理:

  1. 调用 before_import_row() 挂钩以允许在导入行数据之前对其进行修改
  2. get_or_init_instance() 使用当前 BaseInstanceLoader 和数据集的当前行调用,返回一个对象和一个布尔值,声明该对象是否是新创建的。

因此,您必须在 中执行此操作before_import_row(),因为如果您稍后执行此操作,get_or_init_instance()将为您创建一个行。


推荐阅读