Почему неуправляемая модель не вычисляет id в Django?
У меня есть неуправляемая модель в Django:
class Person(models.Person):
name = models.CharField(max_length=200)
class Meta:
managed = False
db_table = '"public"."person"'
Где-то в своих тестах я пытаюсь создать запись о человеке в БД:
person = Person(name="Ariel")
person.save()
Но затем я получаю ошибку:
django.db.utils.IntegrityError: null value in column "id" of relation "person" violates not-null constraint
DETAIL: Failing row contains (null, Ariel).
За пределами тестов все работает нормально. В тестах я инициализирую БД с таблицами, на которые ссылается unmanaged, загружая дамп схемы.
В Django docs говорится, что "для этой модели не будет выполняться никаких операций по созданию, изменению или удалению таблиц базы данных", и что "все остальные аспекты работы с моделью точно такие же, как обычно", включая "автоматическое добавление поля первичного ключа в модель, если вы его не объявили". Но разве это не означает, что этот код должен работать? Почему Django и Postgres не позаботились об идентификаторе? Я делаю что-то не так? Как я могу это исправить?
Наверняка проблема в том, что в вашей таблице PostgreSQL поле id
не является автоматически инкрементируемым полем и по умолчанию обнуляется.
Это довольно распространенная проблема при использовании неуправляемых моделей на Django. Вам нужно охватить все аспекты таблицы, которую вы используете.