首页 > 解决方案 > 在 Django DB 中存储值更改

问题描述

我在 Django 模型中记录价格历史数据,并希望在它发生变化时保存该值而不是之前记录的值。

例如,如果我每天检查一次价格,我想要以下...

Time | Price
1    | $10
2    | $10
3    | $12
4    | $15
5    | $15

被记录为...

Time | Price
1    | $10
3    | $12
4    | $15

有没有人有什么建议?

我的models.py文件

class PriceHistory(models.Model):
    product_id = models.ForeignKey('Product', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=9, decimal_places=2)
    timestamp = models.DateTimeField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.product_id)

我当前将所有行存储到数据库的代码(对于每天使用新价格更新的数据框的每一行)

ph, created = PriceHistory.objects.update_or_create(
    product_id=row.product_id,
    defaults={
       "timestamp": timezone.now(),
       "price": row.price_current,
    }
)

标签: pythondjango

解决方案


你试过了get_or_create吗?如果它已经存在,它将不会创建新项目

obj, created = PriceHistory.objects.get_or_create(
    product_id=row.product_id,
    price=row.price_current,
    defaults={"timestamp": timezone.now()},
)

推荐阅读