如何在django中自动更新数据?
How to auto update data in django?
我正在尝试在 Django 中构建电子商务应用程序。在每个产品中,我有三个标签标记,它们是 is_new、is_hot、is_promo。
is_new 会 True 当一个产品要创建的时候,我已经做到了。但系统需要在产品超过 7 天时自动将 is_new 设置为 False。我在 created_date 模型中添加了 created_date 字段。我怎样才能将 is_new 自动更新为 False?有什么提示吗?
is_hot 将 True 当产品销量最高时。其实前两个产品会很火。而当其他产品火爆时,之前的火爆产品将自动False。怎么做?提示?
is_promo 将 True 当我为产品添加折扣时。当我取消折扣时,它将是 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
我正在尝试在 Django 中构建电子商务应用程序。在每个产品中,我有三个标签标记,它们是 is_new、is_hot、is_promo。
is_new 会 True 当一个产品要创建的时候,我已经做到了。但系统需要在产品超过 7 天时自动将 is_new 设置为 False。我在 created_date 模型中添加了 created_date 字段。我怎样才能将 is_new 自动更新为 False?有什么提示吗?
is_hot 将 True 当产品销量最高时。其实前两个产品会很火。而当其他产品火爆时,之前的火爆产品将自动False。怎么做?提示?
is_promo 将 True 当我为产品添加折扣时。当我取消折扣时,它将是 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