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

如何通过外键查询Django中符合日期条件的用户邮箱?

获取符合条件的用户邮箱的Django查询方案

你可以通过Django的关联查询特性直接获取关联User表的邮箱字段,这里给你两种实用的方案:

方案一:通过模型实例提取邮箱(直观易读)

这种方式适合需要同时处理Stocks其他字段的场景,用select_related优化查询避免多次数据库请求:

from datetime import datetime, timedelta
from django.shortcuts import render
from .models import Stocks

def allstocks_view(request):
    last_month = datetime.today() - timedelta(days=30)
    # 关联查询User表,避免N+1查询问题
    valid_stocks = Stocks.objects.filter(date__lte=last_month).select_related('user')
    # 提取邮箱,过滤掉user为null的记录
    user_emails = [stock.user.email for stock in valid_stocks if stock.user]
    # 如果需要去重(同一个用户可能有多条股票记录)
    unique_emails = list(set(user_emails))
    
    # 后续可以把emails传递到模板或者做其他处理
    return render(request, 'your_template.html', {'emails': unique_emails})

方案二:直接查询邮箱字段(性能更优)

如果只需要邮箱数据,用values_list直接查询关联字段,不需要实例化模型对象,效率更高:

from datetime import datetime, timedelta
from django.shortcuts import render
from .models import Stocks

def allstocks_view(request):
    last_month = datetime.today() - timedelta(days=30)
    # 直接查询user__email,同时排除user为空的记录,并用distinct去重
    unique_emails = Stocks.objects.filter(
        date__lte=last_month,
        user__isnull=False
    ).values_list('user__email', flat=True).distinct()
    
    return render(request, 'your_template.html', {'emails': unique_emails})

额外提醒

你的Stocks模型里seller字段的默认值设置有问题:default='null',因为BooleanField只能接受布尔值(True/False)或者None,字符串'null'会导致报错,建议改成:

seller=models.BooleanField(verbose_name=_('seller'), default=None, null=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:16