Как автоматически обновить данные в django? - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь создать приложение электронной коммерции в Django. В каждом продукте у меня есть три ярлыка с ярлыками: is_new , is_hot , is_promo .

  1. is_new будет True , когда продукт будет создан, я сделал это. Но система должна автоматически сделать is_new до False , если продукт старше 7 дней. Я добавил create_date поле в Product модель. Как я могу автоматически обновить is_new до False? Любые подсказки?

  2. is_hot будет True , когда продукт будет наиболее продаваемым. На самом деле первые два продукта будут горячими. И когда другой продукт нагревается, тогда предыдущие горячие продукты будут автоматически False . Как это сделать? Подсказки?

  3. is_promo будет True , когда я добавлю скидку на товар. И это будет Ложь , когда я сниму скидку. Есть подсказки?

1 Ответ

0 голосов
/ 29 марта 2020

Как вы их реализуете, зависит от того, как вы обрабатываете связанные данные.

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


ГДЕ: settings.MAX_NEW_DAYS - это объект timedelta

...