【发布时间】:2012-03-15 06:27:53
【问题描述】:
启用自然键后,如何从 Django 的转储数据生成的 JSON 中排除主键?
我已经构建了一条我想“导出”的记录,以便其他人可以将其用作模板,方法是将其加载到具有相同架构的单独数据库中,而不会与同一模型中的其他记录发生冲突。
据我了解,Django 支持自然键,这似乎是 NK 的设计初衷。我的记录有一个唯一的name 字段,也用作自然键。
所以当我跑步时:
from django.core import serializers
from myapp.models import MyModel
obj = MyModel.objects.get(id=123)
serializers.serialize('json', [obj], indent=4, use_natural_keys=True)
我希望输出类似于:
[
{
"model": "myapp.mymodel",
"fields": {
"name": "foo",
"create_date": "2011-09-22 12:00:00",
"create_user": [
"someusername"
]
}
}
]
然后我可以使用 loaddata 将其加载到另一个数据库中,并期望它被动态分配一个新的主键。请注意,我的“create_user”字段是 Django 的 auth.User 模型的 FK,它支持自然键,并且它作为其自然键而不是整数主键输出。
但是,实际上生成的是:
[
{
"pk": 123,
"model": "myapp.mymodel",
"fields": {
"name": "foo",
"create_date": "2011-09-22 12:00:00",
"create_user": [
"someusername"
]
}
}
]
这将明显与主键 123 的任何现有记录冲突并覆盖。
解决此问题的最佳方法是什么?我不想将所有自动生成的主键整数字段追溯更改为等效的自然键,因为这会导致性能下降以及劳动密集型。
【问题讨论】:
标签: python django django-models