1

我有一个 JSON 文件 sample.json:

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

我已经有一个带有 username 的 auth.User 模型JoeBob

如果我通过 将它加载到 Django 应用程序中manage.py loaddata sample.json,如果它不存在,我希望它创建记录,否则什么也不做。在这种情况下,它应该什么都不做。

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

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 模型确实支持自然键

4

1 回答 1

1

管理命令不用于向loaddata现有数据库添加数据——它旨在用于加载夹具以进行测试或引导(参见文档)——因此不能很好地与现有数据配合使用。

如果您想从 JSON 加载数据以更新或扩充您的用户列表,最好编写一个自定义管理命令来实现您想要的语义。

您可以查看类似问题的答案,以获取有关如何继续的更多想法。

于 2013-04-30T18:12:38.970 回答