【发布时间】:2018-12-19 18:51:52
【问题描述】:
我正在使用django-import-export包从csv文件中导入数据,基本上遵循readthedocs中的入门教程
我对包在简单配置中的行为感到困惑。
我的模型是这样的:
class Experiment(models.Model):
title = models.CharField(max_length=255, blank=False)
description = models.TextField(blank=False)
research_project = models.ForeignKey(
ResearchProject, null=False, blank=False
)
我创建了一个 csv 文件来测试导入。文件/tmp/experiment.csv很简单:
h1,h1,research_project
v1,v2,66
(请注意,csv 的前两列的标题与任何字段模型都不对应)
然后,我创建了一个资源:
class ExperimentResource(resources.ModelResource):
class Meta:
model = Experiment
exclude = ('id', )
def export(self, queryset=None, *args, **kwargs):
queryset = Experiment.objects.filter(id=kwargs['id'])
return super(ExperimentResource, self).export(queryset, *args, **kwargs)
def get_instance(self, instance_loader, row):
return False
现在,我可以尝试导入/tmp/experiment.csv 数据,方法是调用:
dataset = Dataset().load(open('/tmp/experiment.csv').read())
result = ExperimentResource().import_data(dataset)
print(result.has_errors()) # for debug
最后一行打印False,因为数据已有效导入并且一行已添加到数据库中。但是title 和description 填充了一个空字符串,即使在Experiment 模型中这两个属性有blank=False。
我的问题是:为什么django-import-export 允许为具有带有blank=False 参数的字段的模型保存空字符串?为什么包不检查相应字段模型的数据集标题?
如何使django-import-export 来检查具有blank=False 的字段中的标题和空字符串?
【问题讨论】:
标签: python django csv django-import-export