更新
我已经提交了一份feature request。其思想是在unique
或{pass
将由数据库生成的{
我有以下型号:
class Compositions(models.Model):
composer_key = models.ForeignKey(
Composer,
)
composition = models.CharField(
max_length=383,
)
class Meta(object):
unique_together = (('composer_key', 'composition'), )
在管理界面中使用django import-export,而不为csv文件中的每个条目提供id
。。。如果已存在一对csv文件,则该过程将因完整性错误而中断
CSV文件如下:
id composer_key composition
1 Hot Stuff
2 Star Wars
The idea将使用skip_row
并在管理中实现它。在
在管理员py公司名称:
class CompositionsResource(resources.ModelResource):
class Meta:
model = Compositions
skip_unchanged = True
report_skipped = True
class CompositionsAdmin(ImportExportModelAdmin):
resource_class = CompositionsResource
admin.site.register(Compositions, CompositionsAdmin)
但是,这并不能解决问题,因为skip_row
需要在csv文件中有一个id
,以便检查每一行是否与特定的数据库条目相同。在
考虑到数据库可以在使用unique
(_together
)时执行此控制,捕获此错误然后返回skip_row = True
或在该错误上返回{
关于已接受答案的一个注释:它将给出所需的结果,但会使磁盘的使用率和时间与大文件一起急剧下降。在
我一直使用的一种更有效的方法(在花了大量时间浏览文档之后)是重写
skip_row
,并将一组元组作为类的一部分作为唯一约束。我仍然覆盖save_instance
,因为另一个答案建议处理通过的integrityerror。在Python
sets
不创建重复的条目,因此它们似乎适合这种唯一索引。在这种方法至少可以减少在同一个数据集中遇到的重复。我用它来处理多个平面文件,每个文件大约60000行,但是有很多重复的/嵌套的外键。这使得初始数据导入速度更快。在
只有一个改变是需要的。你可以用django进出口
模型.py
用try重写save_实例。失败时忽略错误。 管理员py
^{pr2}$把这个导入
在模型.py公司名称:
这是我为上述模型编写的“动态”脚本,以便自动丢弃重复的条目。我已经将它保存到
^{pr2}$./project_name/csv.py
,并在用数据填充文件duc.csv
的相关列时从shell导入它。列不应包含标题。只有数据。在在csv.py文件公司名称:
相关问题 更多 >
编程相关推荐