2017-01-22 4 views
0

Itemの外部キーオブジェクト(通貨)が更新されるときに、オブジェクトの最小値と最大値を更新したいとします。この状況では、ページが更新されるたびに更新されます。Django外部キーオブジェクトが変更されるときにのみオブジェクトを更新する

私のviews.py

for item in object_list: 
     if item.currency.id == 2: 
      new_min_price = item.min_price * (dollar_rate.value) 
      new_max_price = item.max_price * (dollar_rate.value) 
      item.min_price = new_min_price 
      item.max_price = new_max_price 
      item.save() 

答えて

0

あなたはこれを解決するための信号を使用することができます。https://docs.djangoproject.com/en/1.10/topics/signals/

from django.db.models.signals import post_save 
from django.dispatch import receiver 
from . models import Currency 

# This gets called immediately after any Currency object is saved 
@receiver(post_save, sender=Currency) 
def update_min_max(sender, **kwargs): 
    currency = kwargs.get('instance') 
    item = currency.item_set.get(id=2) 
    new_min_price = item.min_price * (dollar_rate.value) 
    new_max_price = item.max_price * (dollar_rate.value) 
    item.min_price = new_min_price 
    item.max_price = new_max_price 
    item.save() 

あなたはいくつかのマイナーな調整を行う必要があるかもしれませんが、これは一般的な考え方です。 pre_saveは、post_saveではなく、あなたの場合には良いでしょう。

関連する問題