Frage

Für unsere Django App möchten wir einen AutoField bekommen bei einer anderen Zahl als 1 zu starten Es scheint nicht offensichtlich, dass die Art und Weise, dies zu tun. Irgendwelche Ideen?

War es hilfreich?

Lösung

Wie die anderen gesagt haben, würde dies viel einfacher, auf der Datenbankseite zu tun, als die Seite Django.

Für Postgres, würde es sein, wie so : ALTER SEQUENCE sequence_name RESTART WITH 12345; Blick auf eigene DB-Engine-Dokumentation, wie Sie es dort tun würden.

Andere Tipps

Für MySQL erstellt i ein Signal, das diese nach syncdb tut:

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)

Nach einer syncdb der alte table-Anweisung ausgeführt wird. Dadurch werden Sie von der Erstellung eines in mysql anmelden und manuell ausgegeben wird.

EDIT: Ich weiß, dass dies ein alter Thread, aber ich dachte, es könnte jemand helfen

.

Hier ist, was ich tat ..

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

Die Autos Felder hängen, in ein Ausmaß, auf dem Datenbanktreiber verwendet wird.

Sie werden die Objekte suchen tatsächlich für die spezifische Datenbank erstellt, um zu sehen, was passiert.

Ein kurzer Blick auf die Quelle zeigt, dass es keine Möglichkeit für diese zu sein scheint, wahrscheinlich, weil es nicht immer um eins erhöht wird; es nimmt den nächsten verfügbaren Schlüssel: „Ein Integer die nach verfügbaren IDs automatisch Inkremente“ - djangoproject.com

Ich brauchte etwas Ähnliches zu tun. Ich vermied die komplexen Sachen und einfach zwei Felder erstellt:

id_no = models.AutoField(unique=True)
my_highvalue_id = models.IntegerField(null=True)

In views.py habe ich dann hinzugefügt einfach eine feste Zahl an die id_no:

my_highvalue_id = id_no + 1200

Ich bin mir nicht sicher, ob es das Problem hilft zu lösen, aber ich glaube, Sie es leicht um Go-finden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top