I.Jokhadze
I.Jokhadze

Reputation: 477

Django Update object only when foreign key object will change

I want to update my object's min and max price when Item's foreign key object(Currency) will be updated. In this situation it updates after every refresh of page.

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

Upvotes: 0

Views: 403

Answers (1)

Zailef
Zailef

Reputation: 715

You can use signals to solve this: 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()

You might need to make some minor adjustments but this is the general idea. pre_save could be better in your case rather than post_save.

Upvotes: 1

Related Questions