【问题标题】:How to make auto increment field in django which starts from 10000如何在 django 中创建从 10000 开始的自动增量字段
【发布时间】:2017-02-08 06:27:48
【问题描述】:

我想在 Django 中创建一个从较大值开始的自动增量字段,我发现在模型中使用 Autofield 但它从 1 开始。

class University(models.Model):
    id = models.AutoField(primary_key=True)
    university_name = models.CharField(max_length=250, unique=True)
    university_slug = models.SlugField(max_length=250, unique=True)

    def __unicode__(self):
        return self.university_name

如何做到这一点?任何有用的建议将不胜感激?

【问题讨论】:

标签: python mysql django django-models


【解决方案1】:

最简单的就是抓post migrate signal

from django.apps import AppConfig
from django.db.models.signals import post_migrate

def my_callback(sender, **kwargs):
     if sender.name = 'myapp'
     try:
         university = University.objects.create(pk=999, ...)
         university.delete()
     except IntegrityError:
         pass

class MyAppConfig(AppConfig):
    ...

    def ready(self):
        post_migrate.connect(my_callback, sender=self)

我们在这里所做的是创建一条记录并立即删除它。在 mysql 上更改自动增量中的下一个值。记录已被删除并不重要。下一个分配的数字将是 1000。

【讨论】:

  • 我喜欢这个解决方案,但我无法让它发挥作用。我将代码添加到apps.py,对我的模型进行了一些小改动,并做了makemigrationsmigrate,但它没有从1000 创建新记录。我错过了什么?
  • 我认为这不适用于 SQLite,是吗?无论您之前有多少条记录,如果您将它们全部删除并且您的表为空,它将为创建的第一条记录分配 1 作为主键。 @HenryM 可能正在使用 SQLite。有没有人找到解决这个问题的方法?
  • 这没有被标记为 sqlite。我是否也建议您在 sqlite 上实际尝试一下
【解决方案2】:

与其在前端尝试,我建议您在后端(在数据库中)创建序列,并以更高的数字序列值开始。

希望这能解决您的问题。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2014-02-03
    • 2017-06-01
    • 2015-06-06
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多