2008-11-12 12 views
9

En resumen: ¿Cómo se especifica un BIGINT en modelos de Django?campo entero grande en modelos de Django

En un proyecto en curso que estoy haciendo uso de Django (versión 0.97-SVN), he todos los campos enteros en todos los modelos define como IntegerField. Funcionó inmaculadamente durante el ciclo de desarrollo donde estaba usando SQLite para el back-end DB. Sin embargo, tan pronto como me fui a MySQL, noté que para uno de los IntegerFields, MySQL estaba truncando datos --- aparentemente, por razones aún desconocidas para mí, SQLite no se quejó. Miré el esquema y descubrí que un IntegerField en Django se representa como un campo INT (11) en MySQL. Naturalmente, la razón por la cual MySQL estaba truncando datos era porque los datos tenían más de 11 dígitos de longitud. Para solucionarlo, tuve que actualizar manualmente la columna para, en este caso, ser un BIGINT (20). Django y MySQL coexisten pacíficamente con eso. Pero cada vez que reinicio la aplicación en la que descansa el modelo que contiene ese BIGINT, Django nuevamente lo crea como un INT (11). Miré documentos de Django y no encontré nada. ¿He pasado por alto algo?

Gracias.

Respuesta

5

SQLite no se quejará nunca . usa 'tipado manifiesto', es decir, los valores tienen tipo, no las columnas. ¡Te permite almacenar texto grande en una pequeña columna, o lo que quieras! (excepto si define una clave primaria entera, donde usa un entero de 64 bits).

que es una característica muy conveniente, pero hace una mala elección para el desarrollo de SQLite si se va a implementar con un motor diferente.

para el uso de un BIGINT, que tendría que crear una clase de campo personalizado. desafortunadamente, esa parte ha cambiado en Django 1.0, por lo que tendrías que volver a escribirla si/cuando actualices.

0

Pruebe un DecimalField.

23

BigIntegerField se añadió en conjunto de cambios 11.887, 2009-12-17 09:10:38 y es parte de Django 1.2 y más reciente.

+0

+1 para resolver mi problema. – bennedich

Cuestiones relacionadas