Django如何通过外键关联Canva模型的created字段筛选Bilan模型
Django 跨外键过滤Bilan查询结果的方法
Django ORM 支持通过**双下划线(__)**语法跨外键关联访问关联模型的字段,直接基于外键字段拼接关联模型的字段名即可完成跨表过滤,具体实现如下:
基础过滤示例
比如过滤关联的Canva实例创建时间晚于2024年1月1日的所有Bilan记录:
from django.utils import timezone from datetime import datetime # 构造带时区的目标日期(适配Django时区配置) target_date = timezone.make_aware(datetime(2024, 1, 1)) # 跨外键过滤 filtered_bilans = Bilan.objects.filter(canva__created__gte=target_date)
常用查询条件扩展
你可以根据需求替换__gte(大于等于)为其他时间查询规则:
__lt:小于指定时间__gt:大于指定时间__lte:小于等于指定时间__range:匹配指定时间区间,示例:filtered_bilans = Bilan.objects.filter(canva__created__range=(start_date, end_date))__date:精确匹配年月日,忽略时分秒,示例:filtered_bilans = Bilan.objects.filter(canva__created__date=datetime(2024,1,1).date())
特殊场景:保留无关联Canva的记录
如果你的Bilan实例canva字段允许为空,默认过滤会自动排除无关联Canva的记录,如需保留可以用Q对象组合条件:
from django.db.models import Q filtered_bilans = Bilan.objects.filter( Q(canva__isnull=True) | Q(canva__created__gte=target_date) )
内容的提问来源于stack exchange,提问作者CSofiane
相关产品推荐
相关产品推荐

