Большое целочисленное поле в моделях django

Вкратце: как указать BIGINT в моделях Django?

В текущем проекте я использую Django (версия 0.97-svn), у меня есть все целочисленные поля во всех моделях, определенных как IntegerField. Он работал безупречно во время цикла разработки, когда я использовал SQLite для бэкэнда БД. Однако, как только я перешел на MySQL, я заметил, что для одного из IntegerFields MySQL усекал данные - очевидно, по причинам, до сих пор мне неизвестным, SQLite не жаловался. Я посмотрел на схему и обнаружил, что IntegerField в Django представлен в MySQL как поле INT (11). Естественно, что MySQL усекал данные, потому что длина данных превышала 11 цифр. Чтобы обойти эту проблему, мне пришлось вручную обновить столбец, чтобы в данном случае он был BIGINT (20). С этим мирно сосуществуют Django и MySQL. Но всякий раз, когда я сбрасываю приложение, в котором находится модель, содержащая этот BIGINT, Django снова создает его как INT (11). Я просмотрел документы Django и ничего не нашел. Я что-то упустил?

Спасибо.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
15
0
25 303
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

SQLite не будет жаловаться на Когда-либо. он использует «манифестную типизацию», то есть значения имеют тип, а не столбцы. Это позволяет вам хранить большой текст в столбце smallint или что угодно! (кроме случаев, когда вы определяете целочисленный первичный ключ, где он использует 64-битное целое число).

это очень удобная функция, но она делает SQLite плохим выбором для разработки, если вы собираетесь развертывать с другим движком.

для использования BIGINT вам нужно будет создать настраиваемый класс поля. к сожалению, эта часть изменилась в Django 1.0, поэтому вам придется переписать ее, если / когда вы обновите.

Попробуйте DecimalField.

Это правильный ответ. BigInteger увеличивается до 9223372036854775807, но вы можете подняться выше с помощью DecimaField my_number = models.DecimalField (max_digits = 99, decimal_places = 0,) Конечно, это будет Decimal, а не int, но он подтвердит, что пользователь не может вставлять числа после точки и позволит увеличить числа.

ignacio.munizaga 17.02.2021 19:32

BigIntegerField был добавлен в набор изменений 11887, 17 декабря 2009 г., 09:10:38 и является частью Django 1.2 и новее.

Другие вопросы по теме