如何加载Django JSON以避免与自然键冲突

时间:2013-04-30 16:15:21

标签: python django json

我有一个JSON文件sample.json:

[
    {
        "pk": null, 
        "model": "auth.user", 
        "fields": {
            "username": "JoeBob"
        }
    }
]

我已经拥有一个名称为JoeBob的auth.User模型。

如果我通过manage.py loaddata sample.json将它加载到Django应用程序中,我希望它创建记录,如果它不存在,或者不执行任何操作。在这种情况下,它应该什么都不做。

但是,它似乎尝试创建一个重复的记录,返回错误:

IntegrityError: Could not load auth.User(pk=None): duplicate key value violates unique constraint "auth_user_username_key"
DETAIL:  Key (username)=(JoeBob) already exists.

如何加载JSON数据,以便只创建相应的自然键尚不存在的记录?据说,Django的auth.User模型does support natural keys

1 个答案:

答案 0 :(得分:1)

loaddata管理命令不用于将数据添加到现有数据库 - 它旨在用于加载灯具以进行测试或自举(see the docs) - 因此无法播放很好地利用现有数据。

如果要从JSON加载数据以更新或扩充用户列表,那么实现所需语义的writing a custom management command会更好。

您可以查看a similar question的答案,了解有关如何继续的更多提示。