campo inteiro grande em modelos do Django

votos
9

Em resumo: Como você especificar um BIGINT em modelos de Django?

Em um projeto atual que estou fazendo usando Django (a liberação de 0,97-svn), eu tenho todos os campos inteiro em todos os modelos definidos como IntegerField. Ele estava trabalhando imaculadamente durante o ciclo de desenvolvimento onde eu estava usando SQLite para o backend DB. No entanto, assim que saiu para o MySQL, notei que, para um dos IntegerFields, MySQL foi truncar dados --- aparentemente, por razões ainda desconhecidas para mim, SQLite não reclamou. Olhei para o esquema e descobriu que um IntegerField em Django é representado como um campo INT (11) em MySQL. Naturalmente, a razão MySQL foi truncando dados foi porque os dados era mais do que 11 dígitos de comprimento. Para solucionar, I teve de actualizar manualmente a coluna para, neste caso, ser um BIGINT (20). Django e MySQL coexistir pacificamente com isso. Mas sempre que eu reiniciar o aplicativo no qual repousa o modelo que contém essa BIGINT, Django novamente cria-lo como um INT (11). Eu olhei docs Django, e não encontrou nada. Eu tenha esquecido alguma coisa?

Obrigado.

Publicado 12/11/2008 em 12:59
fonte usuário
Em outras línguas...                            


3 respostas

votos
23

BigIntegerField foi adicionado em conjunto de alterações 11887, 2009-12-17 9:10:38 e é parte de Django 1,2 e mais recente.

Respondeu 28/09/2010 em 12:29
fonte usuário

votos
5

SQLite não vai reclamar sempre . ele usa 'digitação manifesto', isto é, os valores têm o tipo, não as colunas. Ele permite que você armazene bigtext em um collumn smallint, ou o que quiser! (exceto se você definir uma chave primária inteiro, onde ele usa um número inteiro de 64-bit).

que é uma característica muito conveniente, mas faz uma má escolha SQLite para o desenvolvimento se você estiver indo para implantar com um motor diferente.

para usar um BIGINT, você teria que criar uma classe de campo personalizado. infelizmente, essa parte foi alterado no Django 1.0, então você teria que reescrevê-lo se / quando você atualizar.

Respondeu 12/11/2008 em 13:54
fonte usuário

votos
0

Tente uma DecimalField.

Respondeu 26/06/2009 em 17:14
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more