2016-12-27 1 views
1

フィールドをインクリメントするが、文字で始まるフィールドを定義する可能性はありますか?したがって、値はS123、S124、S125のようになります。CharFieldをインクリメント

私はそれのためにidフィールドを使用したいが、私はいくつかの理由でD 'CharFieldですとしてそれを持ってしたいとdは。私は使用することができます回避策として

id = models.CharField(max_length = 32, primary_key = True) 

や保存方法を再定義するので、私は常にその値を事前計算が、これは」tは 『本物』のソリューションよりもその堅牢で優勝し、また、私の解決策計算には遅すぎるでしょう。

私の問題に対する適切な解決策はありますか?

ジャンゴ:1.9.2 のPython:3.4.2

+0

これはあなたにとって興味深いかもしれません:https://docs.djangoproject.com/es/1.9/ref/models/fields/#django.db.models.UUIDField – crystalAhmet

答えて

2

私はあなたが手動で主キーを定義する必要はないと思います。 Djangoは通常リレーショナルデータベースを使ってアプリケーションを構築します。つまり、必要なときにルックアップを行うためにいくつかのキーフィールドに別のテーブルjoinを依存させます。 S123のような主キーを持つと、他のテーブルの参照と同じものを保存する必要があるため、維持するのがさらに難しくなります。

私は何を示唆していることは、別々の文字部分と数字を記憶しています。数字部分として作成されたデフォルトのidフィールドdjan​​goを使用して、文字部分を格納する独自のフィールドを作成することができます。次に、プロパティメソッドを使用して、必要な値を返します。大雑把:

class Foo(models.Model): 
    letter = models.CharField(max_length=1) 

    @property 
    def symbol(self): 
     return '%s%s' % (self.letter, self.id) 

は、その後、あなたが行うことができます:あなたが知らない場合には

foo = Foo.objects.create(letter='S') 
print foo.symbol # this would print S1, S2, etc. 

を、ここで@property in pythonの説明です。

+0

まあ、最終的な解決策として私は新しいフィールド(c_id、CharField)、私はその値をpost_save信号(作成時)の間維持します。 – user2194805

関連する問題