Большое целочисленное поле в моделях Django - PullRequest
12 голосов
/ 12 ноября 2008

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

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

Спасибо.

Ответы [ 3 ]

30 голосов
/ 28 сентября 2010

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

5 голосов
/ 12 ноября 2008

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

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

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

0 голосов
/ 26 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...