Как исключить первичный ключ из JSON, созданного dumpdata Django, когда включены естественные ключи?
Я создал запись, которую хотел бы «экспортировать», чтобы другие могли использовать ее в качестве шаблона, загрузив ее в отдельные базы данных с той же схемой, не конфликтуя с другими записями той же модели.
Насколько я понимаю, 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» является FK для модели auth.User Django, которая поддерживает естественные ключи и выводится как естественный ключ вместо целочисленного первичного ключа.
Однако на самом деле сгенерировано следующее:
[
{
"pk": 123,
"model": "myapp.mymodel",
"fields": {
"name": "foo",
"create_date": "2011-09-22 12:00:00",
"create_user": [
"someusername"
]
}
}
]
, что явно конфликтует и перезаписывает любую существующую запись с первичным ключом 123.
Как лучше всего это исправить? Я не хочу задним числом изменять все автоматически сгенерированные целочисленные поля первичного ключа на любые эквивалентные естественные ключи, поскольку это приведет к снижению производительности, а также потребует больших затрат труда.
Редактировать: Похоже, это ошибка , о которой сообщалось ... 2 года назад ... и в основном игнорировалась ...