Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a custom AutoField primary_key entry within Django

I am trying to create a custom primary_key within my helpdesk/models.py that I will use to track our help desk tickets. I am in the process of writing a small ticking system for our office.

Maybe there is a better way? Right now I have:

id = models.AutoField(primary_key=True)

This increments in the datebase as; 1, 2, 3, 4....50...

I want to take this id assignment and then use it within a function to combine it with some additional information like the date, and the name, 'HELPDESK'.

The code I was using is as follows:

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)))

The idea being is that the entries in the database would be:

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

I want to then use this as the ForeignKey to link the help desk ticket to some other models in the database.

Right now what's coming back is:

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

This post works - Custom Auto Increment Field Django Curious if there is a better way. If not, this will suffice.

like image 812
tryin2code Avatar asked Oct 18 '22 07:10

tryin2code


1 Answers

This works for me. It's a slightly modified version from Custom Auto Increment Field Django from above.

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

It's called like this:

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

If gives you the following:

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

The numbering doesn't start over after each day, which is something I may look at doing. The more I think about it; however, I am not sure if I even need the date there as I have a creation date field in the model already. So I may just change it to:

HEL-000000000
HEL-000000001
HEL-000000002
...
like image 74
tryin2code Avatar answered Oct 20 '22 22:10

tryin2code