문제

Django 앱의 경우 AutoField 1이 아닌 숫자에서 시작하려면이를 수행하는 명확한 방법은 없는 것 같습니다.어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

다른 사람들이 말했듯이 이것은 Django 측보다 데이터베이스 측에서 수행하는 것이 훨씬 쉬울 것입니다.

Postgres의 경우 그렇게: ALTER SEQUENCE sequence_name RESTART WITH 12345; 거기에서 수행하는 방법에 대해서는 자신의 DB 엔진 문서를 살펴보십시오.

다른 팁

MySQL의 경우 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)

syncdb 후에 alter table 문이 실행됩니다.이렇게 하면 mysql에 로그인하여 수동으로 발급할 필요가 없습니다.

편집하다:나는 이것이 오래된 스레드라는 것을 알고 있지만 누군가에게 도움이 될 것이라고 생각했습니다.

내가 한 일은 다음과 같습니다 ..

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

자동 필드는 사용 중인 데이터베이스 드라이버에 따라 어느 정도 달라집니다.

무슨 일이 일어나고 있는지 확인하려면 특정 데이터베이스에 대해 실제로 생성된 개체를 살펴봐야 합니다.

간략히 살펴보기 원천 이에 대한 옵션이 없는 것 같습니다. 아마도 항상 1씩 증가하지 않기 때문일 것입니다.사용 가능한 다음 키를 선택합니다."사용 가능한 ID에 따라 자동으로 증가하는 IntegerField" — djangoproject.com

비슷한 일을 해야 했어요.저는 복잡한 작업을 피하고 간단히 두 개의 필드를 만들었습니다.

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

그런 다음 views.py에서 id_no에 고정 숫자를 추가했습니다.

my_highvalue_id = id_no + 1200

문제를 해결하는 데 도움이 될지는 모르겠지만 쉽게 해결할 수 있을 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top