如何在django中自动更新数据?

How to auto update data in django?

我正在尝试在 Django 中构建电子商务应用程序。在每个产品中,我有三个标签标记,它们是 is_newis_hotis_promo

  1. is_newTrue 当一个产品要创建的时候,我已经做到了。但系统需要在产品超过 7 天时自动将 is_new 设置为 False。我在 created_date 模型中添加了 created_date 字段。我怎样才能将 is_new 自动更新为 False?有什么提示吗?

  2. is_hotTrue 当产品销量最高时。其实前两个产品会很火。而当其他产品火爆时,之前的火爆产品将自动False。怎么做?提示?

  3. is_promoTrue 当我为产品添加折扣时。当我取消折扣时,它将是 False。有什么提示吗?

如何实现这些取决于您如何处理相关数据。

  • is_new 您需要创建日期。
  • is_hot 你也需要相关的销售数量和一个值来比较它,比如 hot_threshold_count 之类的。
  • is_promo 您可能希望将其链接到促销详情。

下面是我将如何处理这个问题的粗略草图:

from django.utils import timezone
from django.conf import settings


class Product(models.Model):
    ...  # name, etc
    creation_datetime = models.Datetime(auto_add_now=True)
    sold_count = models.Integer(default=0)

    @property
    def is_hot(self) -> bool:
        return self.sold_count >= settings.HOT_COUNT_THRESHOLD

    @property
    def is_new(self) -> bool:
        elapsed_days = (timezone.now() - self.creation_datetime).days
        return elapsed_days <= settings.MAX_NEW_DAYS

    @property
    def is_promo(self) -> bool:
        has_promos = bool(Promotion.objects.filter(product=self).count())
        return has_promos



class Promotion(models.Model):
    creation_datetime = models.Datetime(auto_add_now=True)
    product = models.ForeignKey(Product)
    discount_percentage = models.Float()


WHERE: settings.MAX_NEW_DAYS is a timedelta object