2013-05-30 35 views
6

我正在尝试使用manage.py loaddata myfixture.json来故意批量覆盖我的数据库中的多个记录。然而,它给了我错误:如何防止Django灯具与现有数据发生冲突

IntegrityError: Problem installing fixture 'myfixture.json': Could not load myapp.Person(pk=1): (1062, "Duplicate entry 'Bob' for key 'name'") 

我认为loaddata的行为是覆盖记录,如果主键匹配现有的记录?我错了,还是在Django 1.5中改变了?我如何得到它覆盖?

+0

你确定主键匹配吗?你可以从myfixture.json发布一部分给Bob吗?你确定数据库中的Bob有pk = 1吗? – fsw

+1

您是否尝试用自然键(dumpdata --natural)创建您的灯具? – DimmuR

回答

4

我找到了一种方法来修改Django的loaddata命令,以便在加载时正确解析自然键,并避免重新加载重复项。修改后的命令发布为here。官方载入数据之间的唯一区别是189-201行。

1

也许如果你创建一个命令,并从中调用固定,你可以处理这种情况。

在我看来,灯具是用于静态数据的。

+0

这应该是一个评论。 – NathanOliver

相关问题