2016-07-16 8 views
0

現在モデルを作成していますが、フィールドの1つがパーセンテージです。ステータスに応じてパーセンテージフィールドを更新したかったのです。ステータスdjangoモデルに基づくデータUpdater

これは私のmodels.py

class Contact(models.Model): 

    STATUS = (
     ('NY','Not Yet'), 
     ('RN','Running'), 
     ('CO','Completed'), 
    ) 


    status = models.CharField(max_length=2, choices=STATUS, default='NY') 
    percentage = models.FloatField() 

    if status == 'CO': 
     percentage = 100 
    else: 
     percentage = 0 

であり、これは動作しないか、保存されません。

答えて

1

モデルのsaveメソッドをオーバーライドし、ロジックをそこに配置します。

class Contact(models.Model): 

    STATUS = (
     ('NY','Not Yet'), 
     ('RN','Running'), 
     ('CO','Completed'), 
    ) 


    status = models.CharField(max_length=2, choices=STATUS, default='NY') 
    percentage = models.FloatField() 


    def save(self, *args, **kwargs): 
     if self.status == 'CO': 
      self.percentage = 100 
     else: 
      self.percentage = 0 
     super(Contact, self).save(*args, **kwargs) # Call the "real" save() method. 
+0

'save'メソッドで' status'は 'self.status'で、' percentage'は 'self.percentage'でなければなりません。 – Nick

+0

ああ、@Nick、ありがとう:)私の答えを編集しました。 – kapilsdv

+0

ありがとうございます。これはまさに私が探していたものです –

2

表示目的でpercentageフィールドを使用している場合は、実際のフィールドにする必要はありません。私はこのようにそれを行うだろう:

class Contact(models.Model): 
    STATUS = (
     ('NY','Not Yet'), 
     ('RN','Running'), 
     ('CO','Completed'), 
    ) 

    status = models.CharField(max_length=2, choices=STATUS, default='NY') 

    @property 
    def percentage(self): 
     if self.status == 'CO': 
      return 100 
     else: 
      return 0 

しかし、あなたが本当にそれをフィールドにしたいならば、あなたはカピルSachdevの答えは持っているもののような何かを行うことができます。

+0

これは素晴らしいことです。しかしこれについてはKapil Sachdevの答えを使用しますが、あなたの答えは私の他の問題に非常に役立ちます。どうもありがとうございます –

関連する問題