Вкратце: как указать 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 и ничего не нашел. Я что-то упустил?
Спасибо.






SQLite не будет жаловаться на Когда-либо. он использует «манифестную типизацию», то есть значения имеют тип, а не столбцы. Это позволяет вам хранить большой текст в столбце smallint или что угодно! (кроме случаев, когда вы определяете целочисленный первичный ключ, где он использует 64-битное целое число).
это очень удобная функция, но она делает SQLite плохим выбором для разработки, если вы собираетесь развертывать с другим движком.
для использования BIGINT вам нужно будет создать настраиваемый класс поля. к сожалению, эта часть изменилась в Django 1.0, поэтому вам придется переписать ее, если / когда вы обновите.
Попробуйте DecimalField.
BigIntegerField был добавлен в набор изменений 11887, 17 декабря 2009 г., 09:10:38 и является частью Django 1.2 и новее.
Это правильный ответ. BigInteger увеличивается до 9223372036854775807, но вы можете подняться выше с помощью DecimaField my_number = models.DecimalField (max_digits = 99, decimal_places = 0,) Конечно, это будет Decimal, а не int, но он подтвердит, что пользователь не может вставлять числа после точки и позволит увеличить числа.