I have 2 models in my project:
class Currency(models.Model): title = models.CharField(max_length=100, unique=True) value = models.FloatField() class Good(models.Model): name = models.CharField(max_length=100) slug = SlugField(max_length=100, unique=True) cost_to_display = models.IntegerField(default=0) cost_in_currency = models.IntegerField() currency = models.ForeignKey(Currency) The idea of such model is to speed up the search by price and have all goods in one currency. Therefore I need some hook which will update all Goods in case exchange rate was updated.
In raw sql it will looks like this
mysql> update core_good set cost_to_display = cost_in_currency * (select core_currency.value from core_currency where core_currency.id = currency_id ) ; Query OK, 663 rows affected (0.10 sec) Rows matched: 7847 Changed: 663 Warnings: 0 Works pretty fast. Though I tried to implement the same in django admin like this (using bulk-update):
def save_model(self, request, obj, form, change): """Update rate values""" goods = Good.objects.all() for good in goods: good.cost_to_display = good.cost_in_currency * good.currency.value bulk_update(goods) obj.save() It takes up to 20 minutes to update all records via django admin this way.
What I am doing wrong? What is the right way to update all the prices?