Исключение первичного ключа в Django dumpdata с естественными ключами

Как исключить первичный ключ из 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 года назад ... и в основном игнорировалась ...

7
задан Cerin 24 February 2012 в 21:40
поделиться