2008-09-22 15 views

Respuesta

12

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

+0

ver http://stackoverflow.com/q/25318279/59439 para hacer esto en una migración –

1

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

1

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.

7

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.

2

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() 
0

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.

Cuestiones relacionadas