Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can my Model primary key start with a specific number?

Tags:

python

django

I have a User model, I want its id start from 10000, then its id should auto-increment like:

10001, 10002, 10003, 10004...

My User class:

class User(AbstractUser):
    username = models.CharField(max_length=64)
    ...

Is it possible to make it come true?

EDIT-1

Before ask this question, I have read this link:Is there a way to set the id value of new Django objects to start at a certain value?

But I don't think the answers are good, so I mean if in Django there is a configuration for achieve this?

like image 663
sof-03 Avatar asked Jun 08 '18 09:06

sof-03


2 Answers

the way is the same as to do datamigrations with RAW_SQL, change APPNAME on your:

python manage.py makemigrations APPNAME --empty

inside the created file:

operations = [
    migrations.RunSQL(
        'ALTER SEQUENCE APPNAME_USER_id_seq RESTART WITH 10000;'
    )
]
like image 53
Brown Bear Avatar answered Nov 06 '22 11:11

Brown Bear


The solution is to set autoincrement field like:

user_id = models.AutoField(primary_key=True)

After this, you can run this command on the database side. You can run this python command by using signals:

ALTER SEQUENCE user_id RESTART WITH 10000;

You can do this by different method.

from django.db.models.signals import post_syncdb
from django.db import connection, transaction
cursor = connection.cursor()
cursor = cursor.execute(""" ALTER SEQUENCE user_id RESTART WITH 10000; """)
transaction.commit_unless_managed()

post_syncdb.connect(auto_increment_start, sender=app_models)

In Django, a model can't have more than one AutoField. And this is used to set a primary key different from the default key.

like image 26
Rajat Jain Avatar answered Nov 06 '22 11:11

Rajat Jain