2017-04-11 63 views
0

(Django的1.10,Python 2.7版)Django的:檢查是否今天範圍DateTime對象的

我有一年型號:

class Year(models.Model): 
    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 
    election_nomination_start_datetime = models.DateTimeField() 
    election_nomination_end_datetime = models.DateTimeField() 

我想讓哪位我從來沒有做過一箇中間件之前 - 檢查datetime.todaydatetime.now是否在年度任何對象的election_nomination_start_datetimeelection_nomination_end_datetime之間的日期範圍內;因此某些頁面的可訪問性會有所不同。

我不知道如何執行這個,所以任何幫助都非常感謝。 此外,如果可以按照我上面描述的方式(限制訪問URL等)給出使用中間件的示例,那對我來說非常有利。

謝謝。

+0

爲什麼你認爲中間件是這裏正確的做法?如果某些視圖只能在特定時間訪問,那麼在視圖中檢查視圖不是更好嗎?像@Alasdair所說的 – Alasdair

+0

,爲什麼需要中間件?在使用querysets對象之前,我做了類似的事情。 – Algorithmatic

回答

0
class Year(models.Model): 
    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 
    election_nomination_start_datetime = models.DateTimeField() 
    election_nomination_end_datetime = models.DateTimeField() 
    objects = YearQuerySet().as_manager() 


class YearQuerySet(models.QuerySet): 

    def occurring_in_day(self, year, month, day): 
     try: 
      picked_date = datetime.date(year, month, day) 
     except (TypeError, ValueError): 
      return self.none() 

     return self.filter(
      election_nomination_start_datetime__lte=picked_date, 
      election_nomination_end_datetime__gte=picked_date, 
     ) 

    def occurring_now(self): 
     now = datetime.now() 
     return self.filter(
      election_nomination_start_datetime__lte=now, 
      election_nomination_end_datetime__gte=now, 
     ) 

然後,你可以這樣做

Year.objects.occurring_now()拿到情況現在發生

,並獲得實例發生在今天,做

today = datetime.today() 
day = today.day 
month = today.month 
year = today.year 
Year.objects. occurring_in_day(year, month, day) 
相關問題