Django:检查Datetime对象范围内是否为今天

时间:2017-04-11 13:27:55

标签: python django datetime middleware django-middleware

(Django 1.10,Python 2.7)

我有一年的模特:

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的访问等)给出使用中间件的示例,那对我来说非常有用。

谢谢。

1 个答案:

答案 0 :(得分: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)