我希望14天后自动更新模型中的字段状态。
这是我的模特。我想在15天后将 status_of_renting 从 date_of_rental 更改为0(如果date.today()如果大于date_of_return)
class RentCatView(ListView):
model = RentCar
def get_queryset(self):
self.model.objects.filter(Q(status_of_renting = 1)&Q(date_of_return__lte = date.today())).update(status_of_renting=0)
return self.model.objects.all()
我可以在我的generic.ListView中覆盖 def get_queryset()或调度,但我确信这是一个糟糕的决定。是否有更好的解决方案来更改字段 status_of_renting 中的状态。
views.py
$qrBuilder = $this->createQueryBuilder('p')
->select('p', 'i')
->leftJoin(IncomingInvoiceItem::class, 'i')
->where('i.outcomePrice > i.price');
$all = $qrBuilder->getQuery()->getResult();
答案 0 :(得分:0)
尝试在queryset中更新数据库确实不是一个好主意-每当有人尝试获取RentCar
的列表时都会执行该操作,这将污染您的数据库请求。
您需要设置cron作业来运行查询以更新RentCar
。好消息是,您每天只能运行一次,因为只有status_of_renting
才应该更改。
您可以使用django应用之一,例如django-cron或django-background-tasks。
例如,这是您需要使用django-background-tasks做的事情:
from background_task import background
from .models import RentCar
@background(schedule=24*60*60)
def update_status_of_renting(user_id):
RentCar.objects.filter(Q(status_of_renting = 1)&Q(date_of_return__lte = date.today())).update(status_of_renting=0)