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' в файле приспособления. Я говорю "исправить", потому что не понимаю, что меня здесь зацепило. Любая подсказка будет оценена по достоинству. Спасибо!

Вернуться на верх