2008-09-22 9 views
13

पर शुरू करने के लिए कैसे प्राप्त करें हमारे Django ऐप के लिए, हम AutoField प्राप्त करना चाहते हैं, जो कि 1 से दूसरे नंबर पर शुरू होता है। ऐसा करने का एक स्पष्ट तरीका प्रतीत नहीं होता है। कोई विचार?Django ऑटोफ़िल्ड्स को उच्च संख्या

उत्तर

12

दूसरों की तरह कहा है, यह Django पक्ष की तुलना में डेटाबेस पक्ष पर करना अधिक आसान होगा।

पोस्टग्रेज़ के लिए, यह like so: ALTER SEQUENCE sequence_name RESTART WITH 12345; अपने स्वयं के डीबी इंजन के दस्तावेज़ों को देखें कि आप इसे कैसे करेंगे।

+0

माइग्रेशन में ऐसा करने के लिए http://stackoverflow.com/q/25318279/59439 देखें –

1

source पर एक त्वरित झलक दिखाता है कि इसके लिए कोई विकल्प नहीं लगता है, शायद इसलिए कि यह हमेशा एक से बढ़ता नहीं है; यह अगली उपलब्ध कुंजी चुनता है: "एक इंटीजरफ़िल्ल्ड जो उपलब्ध आईडी के अनुसार स्वचालित रूप से बढ़ता है" - djangoproject.com

1

ऑटो फ़ील्ड डेटाबेस ड्राइवर पर उपयोग किए जाने पर, कुछ हद तक निर्भर करता है।

आपको यह देखने के लिए वास्तव में विशिष्ट डेटाबेस के लिए बनाई गई वस्तुओं को देखना होगा।

7

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 बदलने तालिका बयान निष्पादित किया जाता है के बाद। यह आपको mysql में लॉगिन करने और मैन्युअल रूप से जारी करने से छूट देगा।

संपादित करें: मुझे पता है कि यह एक पुराना धागा है, लेकिन मैंने सोचा कि यह किसी की मदद कर सकता है।

2

यहाँ मैं क्या किया है ..

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

मैं इसी तरह कुछ करने के लिए की जरूरत है। मैं जटिल सामान बचा और केवल दो क्षेत्रों बनाया:

my_highvalue_id = id_no + 1200

मैं:

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

views.py में, मैं तो बस id_no को एक निश्चित संख्या जोड़ा सुनिश्चित नहीं है कि यह आपकी समस्या को हल करने में मदद करता है, लेकिन मुझे लगता है कि आप इसे आसानी से ढूंढ सकते हैं।

संबंधित मुद्दे