Ошибка при импорте приспособления django с естественным ключом
В контексте проекта django я хочу создать некоторые примеры данных в виде фикстуры. Я экспортировал свои данные с естественным ключом, чтобы избежать любой ночевки данных при импорте, но я не могу импортировать данные вообще.
Приспособление было создано с помощью следующей команды :
python manage.py dumpdata --format yaml --natural-primary --natural-foreign conformity.policy conformity.measure > conformity/fixture/NIST.yaml
Я попытался импортировать приспособление с помощью следующей команды :
python manage.py loaddata conformity/fixture/NIST.yaml
но у меня следующая ошибка
django.core.serializers.base.DeserializationError: Проблема при установке приспособления 'conformity/fixture/NIST.yaml': [''Значение "NIST Cybersecurity Framwork" должно быть целым числом.'']: (conformity.measure:pk=None) field_value was 'NIST Cybersecurity Framwork'
.
Мне кажется, что django не понимает данные правильно и пытается использовать натуральный ключ непосредственно как первичный ключ. Я не нашел никакой возможности изменить это поведение.
Конечно, YAML файл не имеет никаких pk для импортируемого объекта (du to natural key), я ожидал, что Django автоматически сгенерирует их.
Две проблемы в одной, первая, как указал Abdul Aziz Barkat необходимо реализовать класс Manager и метод get_by_natural_key для моего случая использования. Я не совсем правильно понял документацию по этому вопросу.
во-вторых, данные, экспортируемые командой dumpdata
, не совсем те же самые, поэтому мне пришлось реимпортировать старую версию (с пк) заново (без пк), и она прекрасно работает.