2017-07-30 5 views
1

Djangoでは、モデルインスタンスの主キーに対して、モデルのフィールドのデフォルト値に使用する値の種類を決める方法はありますか? 例:私は私が何をしようとしているフィールドquestion_titleを持つQuestionオブジェクトを持っている場合 はこのフィールドを設定することです:Python Djangoフレームワーク:モデルフィールドのデフォルト値を主キーで決定する

question_title = models.CharField(max_length=100, default="title") 

代わりのちょうどdefault="title"を言って、私が言いたいです:

default="title"+self.pk 

問題は、クラスのメンバが実行時に定義されたときに、Pythonの通訳レベルから、どのような値を知る方法がないので、何のインスタンス化が、存在しないこと(少なくとも私は問題が何であるかと思います)されます自己の.pkが持っています。

そうならば、私はのinit()関数を実装しようとしたが、それでも型エラーを取得:

class Question(models.Model): 

    question_title = models.CharField(max_length=100, default="untitled") 
    question_text = models.CharField(max_length=200, default ="content") 

    def __init__(self): 
     self.question_title = models.CharField(max_length=100, default="title"+str(self.pk)) 
     self.question_text = models.CharField(max_length=200, default ="content") 

    def __str__(self): 
     return self.question_title 

エラーMSGがある:

__init__() takes exactly 1 argument (4 given) 
+0

ポストフルトレースバック –

+0

なぜ、 '__init__'を上書きするのではなく、モデルマネージャを使用してください。 initを無効にすることはお勧めできません –

+0

@ArpitSolankiこのことについて言及してくれてありがとうございます。https://docs.djangoproject.com/en/1.11/ref/models/instances/ – paradox

答えて

0

はで呼び出し可能なメソッドを作成します。デフォルト。例えば

def get_default_title(instance, text): 
    # this goes outside of your model 
    title = "%s %s" % (text, instance.id) 
    return title 


question_title = models.CharField(max_length=100, default=get_default_title) 

はこれがあなたのために働いていた場合、私に教えてください。

+0

それは動作しません - 'get_default_title'は両方のパラメータを取得しません –

関連する問題