2017-12-21 30 views
0

私は過去2日間、Pythonで数値文字列をインクリメントする方法を理解しようとしました。私は、レコードが作成されるときにシーケンス番号をインクリメントしようとしています。私は昨日、Integerとしてこれをやろうとしていましたが、うまくいきましたが、データベースに先行ゼロを格納することはできませんでした。私はStackOverflowでこのトピックについて広範な研究を行いましたが、これをIntegerとStore zeroにする方法のいくつかの例がありますが、いずれの例も私のために働いていませんでした。例の多くは2014年からのものであり、おそらくその方法論は変わっています。私はその後、文字列に切り替え、CharFieldに自分の属性を変更し、先行ゼロを使用する関数を得ることができますが、今は増やすことができません。繰り返しますが、私がSOで見つけた例は2014年からのものでした。ここでは動作する関数ですが、私はそれを呼び出すたびにインクリメントしません。それは00000001を返します。私はそれが私がやっていない簡単なものだと確信していますが、私はアイデアがありません。あなたの助けを前にありがとう。ここでは動作するが増分しない関数がある。それが定義されていてここPythonで数値文字列をインクリメントする方法

def getNextSeqNo(self): 
    x = str(int(self.request_number) + 1) 
    self.request_number = str(x).zfill(8) 
    return self.request_number 

はフィールドです:

request_number = models.CharField(editable=True,null=True,max_length=254,default="00000") 

それが存在しない場合、システムが私に次のエラーを与えているとして、私は「00000」のデフォルトを追加しました:

int() argument must be a string, a bytes-like object or a number, not 'NoneType' 

私は、基本的には自分のシーケンス番号として00000001を取得しているので、基本的にはデフォルトで1を増やしています。現在の番号を取得してから1ずつインクリメントする方法を見つけることができないようです。助けていただければ幸いです。

+2

を必要とするゼロの数を計算する必要が

似たものを作っ*数字列*はありません。文字列の場合は数字ではありません。それは一連の文字であり、その一部または全部が数字である場合があります。数字には先行ゼロはありません。 01や001のような10進数はありません。文字列で数学をしません。数学を行う必要がある場合は、実際の数に変換し、計算してから文字列に変換し、希望の長さになるまで0の文字を残します。 –

+1

オフトピックですが、なぜそれは 'CharField'ですか?なぜ整数ではないのですか? –

+1

'self.request_number'が設定されていますか?あなたにデフォルトの – Liam

答えて

1

これを行うことはできますか?はい。しかし、しないでください。

整数にします。

これをプライマリキーにすると、自動的に増分が自動的に行われます。検索のために、文字列を整数に変換して整数を検索します。つまり、実際に含まれているゼロの数が無視されるため心配する必要はありません。それ以外の場合は、6桁の数字を使用して、ユーザーが覚えておらず、6の数字+数字を入れてから一致しないと問題が発生します。

0

A時間前、私はあなたがintにあなたの文字列を変換する必要があり、その後、あなたはその長さを得るために必要があり、その後、あなたが

code = "00000" 
code = str(int(code) + 1) 
code_length = len(code) 

if code_length < 5: # number five is the max length of your code 
    code = "0" * (5 - code_length) + code 

print(code) 
関連する問題