[英]Django: Filter by calculated field
在我的Django項目中,我需要計算行程的日期范圍,以查看行程當前是否正在路上。
class TourTemplate(models.Model):
length = models.IntegerField()
description = models.TextField(max_length=1000)
...
class Trip(models.Model):
tourtemplate = models.ForeignKey(TourTemplate)
start = models.DateField()
...
我將此添加到我的旅行模型中:
def end(self):
length = self.tourtemplate.length
start = self.start
a = start + timedelta(days=length)
return a
在外殼中,它可以工作並返回單個對象的結束日期。 但是,如何過濾查詢集,以便僅在開始和計算的結束日期之間獲取對象?
# First, define a manager subclass
class TripManager(models.Manager):
def get_queryset(self):
length= self.tourtemplate.length
start= self.start
end=start+ timedelta(days=length)
return super(TripManager, self).get_queryset().filter(date__range=[start, end])
class Trip(models.Model):
objects = models.Manager() # The default manager.
current_trip = TripManager() # New manager
現在,您可以致電:
Trip.current_trip.all()
有兩個要點:
嘗試上述解決方案。 希望能幫助到你 :)
無法弄清楚如何將我的計算值插入到查詢集中。 我的解決方案是為結束日期添加另一個日期字段(editable = False),並在創建新行程時計算並保存結束日期:
# Calculate end date on save
def save(self, *args, **kwargs):
self.end = self.start+ timedelta(days=self.tourtemplate.length)
super(Trip, self).save(*args, **kwargs)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.