2017-08-13 6 views
1

ヘルプデスクのチケットを追跡するために使用する、私のヘルプデスク/ models.py内にカスタムprimary_keyを作成しようとしています。私は、私たちのオフィスのための小さなティッキングシステムを書いている途中です。Django内でカスタムAutoField primary_keyエントリを作成する方法

おそらくもっと良い方法がありますか?今すぐ私は持っています:

id = models.AutoField(primary_key=True) 

これは、次のように日付ベースを増分します。 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))) 

アイデアをされているデータベース内のエントリは、になること:私は、その後にForeignKeyのようにこれを使用したい

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

ヘルプデスクチケットをデータベースの他のモデルにリンクします。今戻って来ているもの

は次のとおりです。

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

この投稿は動作します - Custom Auto Increment Field Djangoおさるのより良い方法があるかどうか。そうでない場合は、これで十分です。

答えて

0

これは私のために働く。上のカスタム自動インクリメントフィールドDjangoから少し修正されたバージョンです。あなたは以下を与えた場合

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

:それは、このように呼ばれています

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 

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

ナンバリング毎日の後にオーバー起動しません、それは私がやり遂げることを見るかもしれないものです。もっと私はそれについて考える。しかし、すでにモデルに作成日フィールドがあるので、そこに日付が必要なのかどうかはわかりません。だから私はただそれに変更することがあります:

HEL-000000000 
HEL-000000001 
HEL-000000002 
... 
関連する問題