【问题标题】:Django: Check if Today in Range of Datetime ObjectDjango:检查今天是否在日期时间对象的范围内
【发布时间】:2017-04-11 13:27:55
【问题描述】:

(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 是否在任何 Year 对象的 election_nomination_start_datetimeelection_nomination_end_datetime 之间的日期范围内;因此某些页面的可访问性会有所不同。

我不知道如何执行此操作,因此非常感谢任何帮助。 另外,如果可以举出我上面描述的方式使用中间件的示例(限制对 URL 的访问等),那对我来说将非常有益。

谢谢。

【问题讨论】:

  • 为什么你认为中间件是正确的方法?如果某些视图只能在特定时间访问,那么在视图中进行检查不是更好吗?
  • 就像@Alasdair 说的,为什么需要中间件?我在使用查询集对象之前做过类似的事情。

标签: python django datetime middleware django-middleware


【解决方案1】:
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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多