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

基于日期过滤SubscribeEmailModel得到空QuerySet,请求排查问题

Django过滤返回空QuerySet问题排查

可能的原因及解决方法

1. 日期类型不匹配

你的过滤条件里用了datetime.datetime.today(),但Lesson.startdate是DateField,存储的是纯日期(无时分秒),而datetime.today()返回的是带时间的datetime对象,类型不匹配会导致过滤不到数据。

解决方法:改用日期类型的今日值,替换成datetime.date.today()(需导入from datetime import date):

subscriber = SubscribeEmailModel.objects.filter(
    topic__startdate=date.today(), 
    sent_mail=False
)

2. ListView类属性查询仅执行一次

你在AutoSendNotification类中直接定义subscriber类属性,这段代码只会在类加载时执行一次,不会随每次请求动态更新过滤结果。

正确做法是重写get_queryset方法,在方法内执行动态查询:

from datetime import date
from django.views.generic import ListView
from .models import SubscribeEmailModel

class AutoSendNotification(ListView):
    model = SubscribeEmailModel
    context_object_name = 'subscriber'
    template_name = 'superadmin/email/auto-send.html'

    def get_queryset(self):
        queryset = SubscribeEmailModel.objects.filter(
            topic__startdate=date.today(), 
            sent_mail=False
        )
        print(queryset)
        return queryset

3. 数据库无符合条件的数据

  • 检查Lesson表:startdate的auto_now=True仅在每次保存Lesson对象时更新日期,旧的Lesson记录不会自动同步今日日期,需重新保存对象才会更新。
  • 检查SubscribeEmailModel表:确认存在sent_mail=False且关联上述有效Lesson的记录。

4. 外键关联有效性

确认SubscribeEmailModel的topic外键关联的是存在的Lesson对象,无关联已删除或无效的Lesson记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:10:24