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