You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django日期过滤:获取未过期的Distributor数据

过滤未过期的Distributor数据

要获取未过期的Distributor实例,你可以通过Django ORM结合当前时间对expire_at字段做筛选:

基础查询写法

直接使用filter方法筛选expire_at晚于当前时间的记录:

from django.utils import timezone
from .models import Distributor

# 获取所有未过期的经销商数据
active_distributors = Distributor.objects.filter(expire_at__gt=timezone.now())

关键说明

  • 优先使用django.utils.timezone.now()而非Python原生datetime.now(),它会自动适配项目的时区配置,避免时区不一致导致的筛选错误。
  • 若业务允许“刚好到期”的记录也被算作未过期,可将__gt替换为__gte(表示“大于等于”)。

如果需要频繁执行该查询,推荐在模型中封装查询逻辑:

自定义管理器(推荐方案)

from django.db import models
from django.utils import timezone

class ActiveDistributorManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(expire_at__gt=timezone.now())

class Distributor(models.Model):
    expire_at = models.DateTimeField()
    
    objects = models.Manager()  # 保留默认管理器
    active_objects = ActiveDistributorManager()  # 自定义的活跃数据管理器

后续查询未过期数据时,直接调用自定义管理器:

active_distributors = Distributor.active_objects.all()

类方法封装写法

from django.db import models
from django.utils import timezone

class Distributor(models.Model):
    expire_at = models.DateTimeField()
    
    @classmethod
    def get_active_distributors(cls):
        return cls.objects.filter(expire_at__gt=timezone.now())

调用方式:

active_distributors = Distributor.get_active_distributors()

内容的提问来源于stack exchange,提问作者hexal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:41:42