私は過去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ずつインクリメントする方法を見つけることができないようです。助けていただければ幸いです。
を必要とするゼロの数を計算する必要が
似たものを作っ*数字列*はありません。文字列の場合は数字ではありません。それは一連の文字であり、その一部または全部が数字である場合があります。数字には先行ゼロはありません。 01や001のような10進数はありません。文字列で数学をしません。数学を行う必要がある場合は、実際の数に変換し、計算してから文字列に変換し、希望の長さになるまで0の文字を残します。 –
オフトピックですが、なぜそれは 'CharField'ですか?なぜ整数ではないのですか? –
'self.request_number'が設定されていますか?あなたにデフォルトの – Liam