startapp proyectos makemigrations ejemplos create app mysql django

mysql - proyectos - django startapp



Campo entero grande en modelos django (3)

En resumen: ¿cómo se especifica un BIGINT en los modelos de Django?

En un proyecto actual que estoy usando con Django (versión 0.97-svn), tengo todos los campos enteros en todos los modelos definidos 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.


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).

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

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


Prueba un DecimalField.


BigIntegerField se agregó en el conjunto de cambios 11887, 2009-12-17 09:10:38 y es parte de Django 1.2 y posterior.