Ребят, подскажите пожалуйста по поведению Django:
Допустим, я в модели я пишу:
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
Но запрос он создает такой:
FOREIGN KEY("topic_id") REFERENCES "learning_logs_topic"("id") DEFERRABLE INITIALLY DEFERRED
Почему он дописывает _id в конце?
В Django поле ForeignKey задает связь "один-ко-многим" между двумя моделями. Когда вы определяете поле ForeignKey в модели, Django автоматически создает колонку базы данных с тем же именем, что и поле, за которым следует _id. Например, если вы определите поле ForeignKey с именем topic, Django создаст колонку базы данных с именем topic_id.
Причина этого в том, что поле ForeignKey в вашей модели ссылается на поле первичного ключа целевой модели (в данном случае, поле id модели Topic). Поскольку в Django поле первичного ключа модели всегда называется id, полю ForeignKey в вашей модели автоматически присваивается имя <имя поля>_id, чтобы отличить его от поля первичного ключа целевой модели.
Когда Django генерирует SQL запрос для создания таблицы для вашей модели, он использует имя поля ForeignKey (в данном случае topic_id) в качестве имени столбца базы данных в предложении FOREIGN KEY. Вот почему запрос, который вы предоставили, включает столбец "topic_id" в предложении FOREIGN KEY.
В целом, суффикс _id добавляется к имени поля ForeignKey в вашей модели, чтобы отличить его от поля первичного ключа целевой модели, и этот же суффикс используется в сгенерированном SQL-запросе для указания имени столбца базы данных в ограничении FOREIGN KEY.
Никита
Igor
Make
m700
Шурок
Erik
Артем
Сидредин
Disappointed
Andrii
David
Artur