Start DateTimeField и End DateTimeField duration duration time Показать цену... django models

Я буду вводить начальное DateTimeField и конечное DateTimeField из Admin Panel.
Цена предложения будет показана, когда время начала будет совпадать с временем now().
То есть, когда текущее время будет соответствовать начальному DateTimeField Цена будет показана в HTML-форме.
Аналогично, когда поле End DateTimeField совпадет с текущим временем, цена предложения будет показана OFF из HTML-формы.

model.py
-------
class Product(models.Model):
    price               = models.DecimalField(max_digits=6, decimal_places=2)
    offer_price         = models.DecimalField(max_digits=6, decimal_places=2)
    duration            = models.DurationField('duration')
    offer_price_start_date   = models.DateTimeField(blank=True, null=True)
    offer_price_end_date     = models.DateTimeField(blank=True, null=True)


    def duration(self):
        return self.offer_price_end_date - self.offer_price_start_date
views.py
--------

def product_detail(request):
    product_data = Product.objects.all()

    context = {
        'product': product_data 
    }
    
    return render(request, 'show.html', context)
show.html
---------

{% if product.duration %}
<a>    
  Before Price ${{ product.price }}             
</a>                                            
<a> 
    Now ${{ product.offer_price }}            
</a>  
{% endif %}

Вы можете добавить текущую дату как переменную в шаблоне (используя timezone.now(), как советует документация):

from django.utils import timezone as tz

def product_detail(request):
    context = {
        'current_time': tz.now(),
        'product_list': Product.objects.all(),
    }
    
    return render(request, 'show.html', context)

и затем в вашем шаблоне используйте эту переменную для фильтрации; следующий код показывает цены на все продукты, и дополнительно для тех продуктов, которые имеют действующее предложение, также показывается цена предложения.

{% for p in product_list %}
    <a>    
      Price ${{ p.price }}             
    </a>                                            
    {% if p.offer_price_start_date <= current_time <= p.offer_price_start_date %}
    <a> 
      Offer price ${{ p.offer_price }}            
    </a>  
    {% endif %}
{% endfor %}

Решает ли это вашу проблему?

Вернуться на верх