2017-04-11 33 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) 
相关问题