2017-09-24 13 views
1

私はDjangoを初めて使用しています。私はこの質問が以前に尋ねられていることを確信しています。モデルフィールドのデフォルト値を他のモデルの既知のフィールド値から設定する方法はありますか?

私は例を通して意味することを正確に説明しようとします。

私はビスケット/クッキースズを持っています。私はビスケット、チョコレートサークル(10ビスケット)、バニラウェーハ(15ビスケット)などのパックを持っています。私は製品(ビスケットパック)パックにはビスケットの最大数が入っています。

from Django.db import models 

class Product(models.Model): 
    barcode = models.CharField(max_length=200, primary_key=True) 
    quantity = models.IntegerField() 

実際のパックを含む別のモデルが必要です。あなたはCURRENT_QUANTITYは、製品の数量をデフォルトでパックを作成し、それが0

class Pack(models.Model): 
    barcode = modes.ForeignKey(Product) 
    current_quantity = models.IntegerField() 

まで低減することができ、各ビスケットが除去されると、どのように私はパックCURRENT_QUANTITYは、製品のと同じになるように取得するためにモデルを取得しないときデフォルトでは数量ですか?

モデルで実行しようとすると、これを試してみるのは間違った場所です。私はDRY KISソリューションをより良く歓迎します。

ありがとうございます。

答えて

1

あなたはこのようなパックモデルのsave()メソッドをオーバーライドすることができます

class Pack(models.Model): 
    barcode = modes.ForeignKey(Product) 
    current_quantity = models.IntegerField() 

    def save(self, force_insert=False, force_update=False, using=None, 
     update_fields=None): 
     if not self.id: 
      self.current_quantity = self.barcode.quantity 
     return super(Pack, self).save() 

オブジェクトが現在のオブジェクトならば意味IDを持っているかどうかチェックをself.idない場合はライン新しく追加されました。したがってself.current_quantity = self.barcode.quantityはオブジェクト作成時にのみ実行されます

関連する問題