首页 文章

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

提问于
浏览
1

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

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

id = models.AutoField(primary_key=True)

这在datebase中增加为; 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)))

我们的想法是数据库中的条目是:

HELPDESK-20170813-1
HELPDESK-20170813-2
HELPDESK-20170814-3
...
HELPDESK-20170901-4
...
HELPDESK-20180101-50
...

我想使用它作为ForeignKey将帮助台票证链接到数据库中的其他模型 .

现在回来的是:

HELPDESK-20170813-<django.db.models.fields.AutoField>

这篇文章有效 - Custom Auto Increment Field Django好奇如果有更好的方法 . 如果没有,这就足够了 .

1 回答

  • 0

    这对我有用 . 它是来自上面的Custom Auto Increment Field Django的略微修改版本 .

    models.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
    

    它被称为这样:

    help_num = models.CharField(max_length=17, unique=True, default=increment_helpdesk_number, editable=False)
    

    如果给你以下:

    HEL-20170815-0000
    HEL-20170815-0001
    HEL-20170815-0002
    ...
    

    编号不会在每天之后重新开始,这是我可能会看到的 . 我想的越多;但是,我不确定我是否需要在那里的日期,因为我已经在模型中有一个创建日期字段 . 所以我可以把它改成:

    HEL-000000000
    HEL-000000001
    HEL-000000002
    ...
    

相关问题