python - 如何在一段时间后将 Active True 的布尔值更改为 false
问题描述
我正在尝试在一段时间后将布尔值的参数从 True 设置为 false。
由于我在 Python 和 Django 方面的知识有限,我正在尝试学习概念和逻辑,以便我可以将其应用到项目的其他不同地方。
这是 Models.py
class Coupon(models.Model):
code = models.CharField(max_length=15, unique=True)
valid_from = models.DateTimeField(blank=True, null=True)
valid_to = models.DateTimeField(blank=True, null=True)
active = models.BooleanField(default=True)
当时间范围在 Active=status 变为 False 之后如何设置valid_to
这里是 views.py
class AddCouponView(View):
def post(self, *args, **kwargs):
now = timezone.now()
form = CouponForm(self.request.POST or None)
if form.is_valid():
try:
code = form.cleaned_data.get('code')
order = Order.objects.get(
user=self.request.user, ordered=False)
coupon = Coupon.objects.filter(code__iexact=code, valid_from__lte=now, valid_to__gte=now).exclude(
order__user=self.request.user, max_value__lte=F('used')).first()
if not coupon:
messages.error(self.request, 'You can\'t use same coupon again, or coupon does not exist')
return redirect('core:checkout')
else:
try:
coupon.used += 1
coupon.save()
order.coupon = coupon
order.save()
messages.success(self.request, "Successfully added coupon")
except:
messages.info(self.request, "Max level exceeded for coupon")
return redirect('core:checkout')
except ObjectDoesNotExist:
messages.info(self.request, "You do not have an active order")
return redirect('core:checkout')
解决方案
一种选择是active
通过将其更改为属性来使其动态化,例如
class Coupon(models.Model):
code = models.CharField(max_length=15, unique=True)
valid_from = models.DateTimeField(blank=True, null=True)
valid_to = models.DateTimeField(blank=True, null=True)
@property
def active(self):
return self.valid_to >= timezone.now()
缺点是您将无法active
在过滤器中使用,请参阅按属性过滤。
推荐阅读
- java - 在实际应用程序中使用模拟对象(未测试)
- c# - 如何从 App.config 中检索连接字符串
- android - 收到错误“androidx.appcompat.widget.N 无法转换为 com.google.android.material.button.MaterialButton”
- pointers - 创建一个变量会创建一个副本,而取消引用则不会。为什么?
- java - 从 ibm-mq 读取复制的消息
- events - 如何在 Vue 组件中使用相同的方法定位不同的 v-on:click 事件(显示/隐藏不同的元素)
- python - 向 pyspark 数据框添加行索引(并排添加新列/连接数据框)
- html - 如何使用 flexbox 使父 div 的宽度适合子项目的宽度?
- javascript - 使用 Google 协议缓冲区在 C++ 和 JavaScript 端点之间序列化/反序列化数据?
- python - 如何在python中创建一个高效快速的评分系统?