我将从Admin Panel输入开始DateTimeField
和结束DateTimeField
。
当启动时间与now()
匹配时,将显示报价。
当当前时间匹配开始DateTimeField
时,价格将显示为HTML。
同样,当结束DateTimeField
与当前时间匹配时,报价将从HTML表单显示为OFF。
我的模型:
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
我的观点:
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_end_date %}
<a>
Offer price ${{ p.offer_price }}
</a>
{% endif %}
{% endfor %}
那解决你的问题了吗?