如何在 Django 中创建自定义 AutoField primary_key 条目

try*_*ode 5 python django django-models

我正在尝试在我的 helpdesk/models.py 中创建一个自定义的 primary_key,我将用它来跟踪我们的服务台票证。我正在为我们的办公室编写一个小型滴答系统。

也许有更好的方法?现在我有:

id = models.AutoField(primary_key=True)
Run Code Online (Sandbox Code Playgroud)

这在数据库中增加为;1、2、3、4....50...

我想接受这个 id 分配,然后在一个函数中使用它,将它与一些附加信息(如日期和名称“HELPDESK”)结合起来。

我使用的代码如下:

id = models.AutoField(primary_key=True)

def build_id(self, id):
    join_dates = str(datetime.now().strftime('%Y%m%d'))
    return (('HELPDESK-' + join_dates) + '-' + str(id))

ticket_id = models.CharField(max_length=15, default=(build_id(None, id)))
Run Code Online (Sandbox Code Playgroud)

这个想法是数据库中的条目将是:

HELPDESK-20170813-1
HELPDESK-20170813-2
HELPDESK-20170814-3
...
HELPDESK-20170901-4
...
HELPDESK-20180101-50
...
Run Code Online (Sandbox Code Playgroud)

然后我想使用它作为 ForeignKey 将服务台票证链接到数据库中的其他一些模型。

现在回来的是:

HELPDESK-20170813-<django.db.models.fields.AutoField>
Run Code Online (Sandbox Code Playgroud)

这篇文章有效 -自定义自动增量字段 Django Curious 如果有更好的方法。如果没有,这就足够了。

try*_*ode 4

这对我有用。它是上面的 Django 自定义自动增量字段的稍微修改版本。

模型.py

def increment_helpdesk_number():
    last_helpdesk = helpdesk.objects.all().order_by('id').last()

    if not last_helpdesk:
        return 'HEL-' + str(datetime.now().strftime('%Y%m%d-')) + '0000'

    help_id = last_helpdesk.help_num
    help_int = help_id[13:17]
    new_help_int = int(help_int) + 1
    new_help_id = 'HEL-' + str(datetime.now().strftime('%Y%m%d-')) + str(new_help_int).zfill(4)

    return new_help_id
Run Code Online (Sandbox Code Playgroud)

它的名字是这样的:

help_num = models.CharField(max_length=17, unique=True, default=increment_helpdesk_number, editable=False)
Run Code Online (Sandbox Code Playgroud)

如果给你以下信息:

HEL-20170815-0000
HEL-20170815-0001
HEL-20170815-0002
...
Run Code Online (Sandbox Code Playgroud)

编号不会在每天之后重新开始,这是我可能会考虑做的事情。我越想越觉得;但是,我不确定是否需要那里的日期,因为模型中已经有一个创建日期字段。所以我可能只是将其更改为:

HEL-000000000
HEL-000000001
HEL-000000002
...
Run Code Online (Sandbox Code Playgroud)