Para nuestra aplicación Django, nos gustaría obtener un AutoField
para comenzar en un número distinto de 1. No parece haber una manera obvia de hacerlo. ¿Algunas ideas?Cómo hacer que Django AutoFields comience en un número mayor
Respuesta
Como han dicho los otros, esto sería mucho más fácil de hacer en el lado de la base de datos que en el lado de Django.
Para Postgres, sería like so: ALTER SEQUENCE sequence_name RESTART WITH 12345;
Mire los documentos de su propio motor de base de datos para saber cómo lo haría allí.
Una rápida ojeada al source muestra que no parece haber ninguna opción para esto, probablemente porque no siempre aumenta en uno; selecciona la siguiente clave disponible: "Un IntegerField que se incrementa automáticamente según los ID disponibles" - djangoproject.com
Los campos automáticos dependen, hasta cierto punto, del controlador de la base de datos que se utiliza.
Tendrá que mirar los objetos realmente creados para la base de datos específica para ver qué está sucediendo.
Para MySQL creé una señal que hace esto después de syncdb:
from django.db.models.signals import post_syncdb
from project.app import models as app_models
def auto_increment_start(sender, **kwargs):
from django.db import connection, transaction
cursor = connection.cursor()
cursor = cursor.execute("""
ALTER table app_table AUTO_INCREMENT=2000
""")
transaction.commit_unless_managed()
post_syncdb.connect(auto_increment_start, sender=app_models)
Después de un syncdb se ejecuta la instrucción de modificación de tabla. Esto lo eximirá de tener que iniciar sesión en mysql y emitirlo manualmente.
EDIT: Sé que este es un hilo viejo, pero pensé que podría ayudar a alguien.
Aquí es lo que hice ..
def update_auto_increment(value=5000, app_label="remrate_data"):
"""Update our increments"""
from django.db import connection, transaction, router
models = [m for m in get_models() if m._meta.app_label == app_label]
cursor = connection.cursor()
for model in models:
_router = settings.DATABASES[router.db_for_write(model)]['NAME']
alter_str = "ALTER table {}.{} AUTO_INCREMENT={}".format(
_router, model._meta.db_table, value)
cursor.execute(alter_str)
transaction.commit_unless_managed()
que tenía que hacer algo similar. Evité la materia compleja y simplemente creado dos campos:
id_no = models.AutoField(unique=True)
my_highvalue_id = models.IntegerField(null=True)
En views.py, que luego simplemente añadido un número fijo a la id_no:
my_highvalue_id = id_no + 1200
estoy no estoy seguro si esto ayuda a resolver su problema, pero creo que puede resultarle fácil.
- 1. ¿Cómo hacer que Redis comience en Heroku?
- 2. ¿Cómo comprobar que una cadena comience con un número numérico?
- 3. lista de Python mayor que el número
- 4. ¿Cómo hacer Django QuerySet mayor delete() más eficiente
- 5. ¿Cómo puedo hacer que Java3D comience más rápido?
- 6. ¿Cómo hacer que una tecla principal comience desde 1000?
- 7. ¿Debo esperar a que Django comience a soportar Python 3?
- 8. ¿Puedo hacer que pdb comience a depurar de inmediato?
- 9. número de valores en una lista mayor que un determinado número
- 10. RegEx Comience con letra o número 0
- 11. ¿Puedo nombrar un espacio de nombre C# que comience con un número?
- 12. C++ Encontrar el mayor número en serie
- 13. ¿Cómo hacer un DetailView en django 1.3?
- 14. ¿cómo puedo hacer que una barra de desplazamiento html comience en la parte inferior?
- 15. ¿Cómo se ordena por mayor número en linq
- 16. Test :: Unit Rails - ¿Cómo afirmar un número es mayor que otro?
- 17. mayor que menos-que los cálculos en un Makefile
- 18. Xcode: cómo hacer que PickerView comience en una fila determinada cuando se muestra por primera vez
- 19. Permitir que el número comience con CERO cuando está almacenado en el campo entero de mysql
- 20. ¿Cómo hacer SELECCIONAR MAX en Django?
- 21. gc de un número mayor de scala actor
- 22. ¿Cómo hacer que FileField en django sea opcional?
- 23. Cómo hacer un número variable de parámetros
- 24. cómo hacer jQuery cada uno un número
- 25. ¿Cómo puedo hacer un accesorio de QuerySet en django?
- 26. ¿Cómo esperar a que termine un hilo antes de que comience otro hilo en Java/Android?
- 27. Mayor que menos, python
- 28. cómo hacer coincidir un número que es menor o igual a 100?
- 29. JavaScript triplicar mayor que
- 30. ¿Cómo hacer un filtro menor o igual que en Django queryset?
ver http://stackoverflow.com/q/25318279/59439 para hacer esto en una migración –