【发布时间】:2021-08-01 06:39:19
【问题描述】:
信息:我正在尝试制作按月计费的应用程序。客户可以按月付款购买房产的地方。如果客户上次付款 30 天前,我想将 pending 属性 True 更改为 False。
这是一个基于日程安排的应用程序,但我没有使用 django-crontab 或 celrey。如果用户访问pending_customers 页面,我可以使用视图功能,如果created_at 日期时间为 30 天,视图可以检查所有客户以及最后付款日期created_at。那么view函数可以将pending改为False。
pending_customers view 工作正常,但是当我访问页面 pending_customers 时,它会将 pending 更改为 False。它不能等待30天。如果客户最后一次付款不是 30 天,那么我如何才能将 view 功能保留到 30 天?
models.py
class Customer(models.Model):
"""Customer Model"""
name = models.CharField(max_length=255)
prop_select = models.ForeignKey(Property, on_delete=models.SET_NULL, null=True)
created_on = models.DateTimeField(auto_now_add=True)
pending = models.BooleanField(default=False)
class Payment(models.Model):
"""Payment Model"""
customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL, related_name='payment')
created_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(max_digits=17, decimal_places=2, default=0.0)
def save(self, *args, **kwargs):
super(Payment, self).save(*args, **kwargs)
self.customer.pending = True
self.customer.save()
views.py
def pending_customers(request):
queryset = Customer.objects.all()
for i in queryset:
for d in i.payment.filter(created_at__gte=datetime.now() - timedelta(minutes=30)).order_by('-pk')[:1]:
d.customer.pending = False
d.customer.save()
context = {
'customers': queryset,
}
return render(request, 'customer/pending-customers.html', context)
【问题讨论】:
标签: python django django-models django-views django-cron