django 查询过滤条件处理

from django.db.models import Q

# 获取查询参数
start_date = request.GET.get('start_date')
end_date = request.GET.get('end_date')
start_date2 = request.GET.get('start_date2')
end_date2 = request.GET.get('end_date2')
project_name = request.GET.get('title')

# 创建初始查询集
mymodel = ProjectModel.objects.using('company').all()

# 添加项目名称模糊查询条件
if project_name:
    mymodel = mymodel.filter(project_name__icontains=project_name)

# 同时查询两个日期范围
if start_date and end_date and start_date2 and end_date2:
    mymodel = mymodel.filter(
        Q(contracted_time__range=(start_date, end_date)) &
        Q(completion_time__range=(start_date2, end_date2))
    )
# 查询第一个日期范围
elif start_date and end_date:
    mymodel = mymodel.filter(contracted_time__range=(start_date, end_date))
# 查询第二个日期范围
elif start_date2 and end_date2:
    mymodel = mymodel.filter(completion_time__range=(start_date2, end_date2))

这个写法有几个特点和优点:

  1. 模块化和可读性: 将查询过滤条件处理部分封装成一个独立的代码块,使得代码结构更加清晰和模块化。每个条件都有清晰的注释说明,提高了代码的可读性。

  2. 灵活性: 通过使用 Django 提供的 Q 对象,可以构建复杂的查询条件,例如同时查询两个日期范围,或者仅查询一个日期范围。这种灵活性使得代码能够适应不同的查询需求。

  3. 简洁性: 通过逐步添加查询条件,只在需要的情况下对查询集进行过滤,避免了重复代码和不必要的数据库查询。这种简洁的写法减少了代码量,提高了代码的可维护性。

  4. 可扩展性: 如果需要添加更多的查询条件,只需在相应的位置添加新的查询条件即可,而不需要修改整个查询逻辑。这种可扩展性使得代码更容易维护和扩展。

总的来说,这种写法使得查询过滤条件处理部分的代码更加清晰、简洁、灵活和可扩展,提高了代码的可读性和可维护性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值