Почему неуправляемая модель не вычисляет 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. Вам нужно охватить все аспекты таблицы, которую вы используете.

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