Django id против pk в fixtures/loaddata
Странная (для непосвященных lol) проблема с моделями, использующими пользовательское поле CharField для первичного ключа/id:
id = models.CharField(max_length=10, primary_key=True)
Чувствуя, что я знаю, что делаю, я создал следующий (json) файл приспособлений:
[
{
"model": "products.product",
"id": "am11",
"fields": {
"title": "Test Product A",
}
},
{
"model": "products.product",
"id": "am22",
"fields": {
"title": "Test Product B",
}
}
]
, и приступил к его загрузке:
✗ python manage.py loaddata fixtures/products.json
Installed 2 object(s) from 1 fixture(s)
Ну, это вроде как ложь. Проверка на странице администратора или в оболочке показывает, что в базе данных есть только один продукт - последний в списке приспособления. Любопытно, что попытки удалить этот продукт через страницу администратора молча терпят неудачу, и только через оболочку он действительно может быть удален. Дальнейшее исследование (в оболочке) выявило интересную проблему - у этого (единственного) созданного Продукта pk/id установлен на пустую строку(?!...но это объясняет, почему администратор не может его удалить). Если я вручную создаю другой, либо на странице администратора, либо в оболочке, новый продукт появляется без проблем, и id и pk установлены в заданную строку. Но loaddata с фиксацией не работает. Первоначально эта проблема была обнаружена, когда базовый тест потерпел неудачу - при использовании того же фикстура, он не выполнил утверждение о количестве продуктов в наборе запросов, утверждая, что есть только один.
Теперь я смог "исправить" проблему, переименовав 'id' в 'pk' в файле приспособления. Я говорю "исправить", потому что не понимаю, что меня здесь зацепило. Любая подсказка будет оценена по достоинству. Спасибо!