Как мой первичный ключ модели может начинаться с определенного номера? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть модель User, я хочу, чтобы ее идентификатор начинался с 10000, затем его идентификатор должен автоматически увеличиваться, например:

10001, 10002, 10003, 10004...

Мой пользовательский класс:

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

Возможно ли его реализовать?

РЕДАКТИРОВАТЬ-1

Прежде чем задать этот вопрос, я прочитал эту ссылку: Есть ли способ установить значение id новых объектов Django для запуска с определенного значения?

Но я не думаю,ответы хорошие, так что я имею в виду, если в Django есть конфигурация для достижения этой цели?

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Мое решение - сделать это вручную:

$ ./manage.py shell
Python 3.6.5 (default, Apr  1 2018, 05:46:30)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from django.contrib.auth.models import User

In [2]: u = User.objects.create_user('name', '', '')

In [3]: User.objects.filter(id=u.id).update(id=10000-1)
Out[3]: 1

In [4]: u.delete()
Out[4]:
(0,
 {'admin.LogEntry': 0,
  'auth.User_groups': 0,
  'auth.User_user_permissions': 0,
  'auth.User': 0})

In [5]: uu = User.objects.create_user('user', '', '')

In [6]: uu.id
Out[6]: 10000
0 голосов
/ 08 июня 2018

Решение состоит в том, чтобы установить поле автоинкремента как:

user_id = models.AutoField(primary_key=True)

После этого вы можете выполнить эту команду на стороне базы данных.Вы можете запустить эту команду python, используя сигналы:

ALTER SEQUENCE user_id RESTART WITH 10000;

Вы можете сделать это другим способом.

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)

В Django модель не может иметь более одного AutoField.И это используется для установки первичного ключа, отличного от ключа по умолчанию.

0 голосов
/ 08 июня 2018

То же самое, что и для миграции данных с RAW_SQL, измените APPNAME на:

python manage.py makemigrations APPNAME --empty

внутри созданного файла:

operations = [
    migrations.RunSQL('ALTER SEQUENCE APPNAME_USER_id_seq RESTART WITH 10000;')
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...