2017-01-22 4 views
0

Ich möchte den Min- und Max-Preis meines Objekts aktualisieren, wenn das Fremdschlüsselobjekt (Währung) des Elements aktualisiert wird. In diesem Fall wird es nach jeder Aktualisierung der Seite aktualisiert.Django Update-Objekt nur, wenn das Fremdschlüsselobjekt geändert wird

mein 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() 

Antwort

0

können Sie Signale verwenden, um dies zu lösen: 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() 

Sie müssen vielleicht einige kleinere Anpassungen vornehmen, aber dies ist die allgemeine Idee. pre_save könnte in Ihrem Fall besser sein als post_save.

Verwandte Themen