【问题标题】:Django import-export how to handle blank CharfieldDjango 导入导出如何处理空白字符域
【发布时间】:2020-05-24 14:56:18
【问题描述】:

我正在尝试使用 django 导入导出模块导入一些数据。 我遇到了一个问题并且找不到任何解决方案,尽管它似乎是导入的一个非常基本的用法......

我正在尝试导入一些 CharFields。这些字段不是强制性的,根据 Django 社区的建议,它们在我的模型中定义为 blank=True,但不是 null=True。

例子:

description = models.CharField(max_length=2000, blank=True )

问题很简单:当我尝试使用空值导入此字段时,我在该字段上收到错误“NOT NULL constraint failed”。

我不明白如何解决这个问题。即使通常不推荐,我是否应该添加 null=True ?有没有我不知道的选项?

感谢您的帮助。

【问题讨论】:

  • 所以你也添加 null=True

标签: django django-import-export


【解决方案1】:

正如你所说,Django 文档声明你应该avoid setting null on CharField

django-import-export 应该正确处理持久化空字符串。

您看到该错误的事实意味着存在阻止此错误的现有约束。

一些建议:

  • 如果在 dev 中,您可以从头开始重新创建数据库并运行迁移吗?
  • 仔细检查没有错误,并且您确定导入到正确表中的description 字段中。
  • 您能否检查数据库并查看description 字段上是否存在任何约束?

更新

要检查的另一件事是,如果您要声明与 csv 中的列相对应的 Field 实例:

  • 确保不要添加default=None。如果是这种情况,它会将空字符串强制转换为None
# !! WRONG !!
# adding 'default' will force empty values to be None
book_id = fields.Field(
    attribute="book_id", column_name="id", widget=widgets.CharWidget(), default=None

【讨论】:

  • blank=True 不会避免在数据库中有约束。我刚刚检查过,我所有的非强制性 CharFields 在数据库中都有约束 NOT NULL。 null 参数是唯一一个对 db 约束进行任何更改的参数。为了暂时绕过这个问题,我在导入中为每个空的描述字段添加了空格字符,但我认为 django-import-export 没有正确处理这种情况
  • 我检查了django-import-exporttest app,它适用于这种情况。你能单步执行代码以找出发生了什么吗? Here 是要检查的行。确保字段的 empty_valueswidgetdefault 值没有在某处被覆盖。
  • 我不知道该怎么做。我不熟悉python中的断点或其他调试方法。当我必须调试自己的代码时,我只是打印。我不知道如何检查不在我的代码中的行是如何工作的......
  • 设置调试非常简单,从长远来看,它将为您节省大量时间。我建议下载 PyCharm 并观看一些 YouTube 教程。如果您需要一些指导,请让我离线。
猜你喜欢
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 2016-08-21
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2014-08-06
相关资源
最近更新 更多