如何解决如何在 Django 中检查模型对象是否存在 30 天?
信息:我正在尝试制作按月计费的应用程序。客户可以按月购买房产。如果客户上次付款是 30 天,我想将 pending
属性更改为 False。
这是一个基于时间表的应用程序,但我没有使用 django-crontab 或 celrey。如果用户访问 pending_customers
页面,我可以使用视图功能,如果 created_at
日期时间为 30 天,则视图可以检查所有客户和上次付款日期 created_at
的客户。然后 view 函数可以将 pending
更改为 False。
pending_customers
view 工作正常,但当我访问页面 pending
时它已将 pending_customers
更改为 False。它无法等待 30 天。如果客户最后一次付款不是 30 天,那么我如何才能将 查看 功能保留 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,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)
解决方法
我认为您使用错误的条件将 pending_customer
标记为 False
。
现在你正在做相反的事情(标记那些小于或等于 30)
据我所知,您想做什么created_at__gte=datetime.now() - timedelta(days=30))
即“让我支付 30 天或更早的所有付款”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。