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 %}
Решает ли это вашу проблему?