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

Django编辑表单如何过滤Driver查询集并保留初始关联司机?

解决方案

你需要调整查询集的过滤条件,让它同时包含未关联任何车辆的司机和当前车辆已关联的司机。可以通过Django的Q对象来实现多条件的或查询:

  1. 首先在表单文件顶部导入Q:
from django.db.models import Q
  1. 修改表单的__init__方法:
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    # 获取当前正在编辑的车辆实例(新增时是未保存的空实例)
    current_vehicle = self.instance
    # 构造查询集:未关联车辆的司机 + 当前车辆已绑定的司机
    self.fields['driver'].queryset = vendor.drivers.select_related('user').filter(
        Q(vehicle__isnull=True) | Q(vehicle=current_vehicle)
    )

逻辑说明:

  • 当是新增车辆时,current_vehicle是未保存的Vehicle实例(无主键),Q(vehicle=current_vehicle)不会匹配任何司机,查询集只会保留未关联车辆的司机,符合需求。
  • 当是编辑车辆时,current_vehicle是已存在的车辆实例,Q(vehicle=current_vehicle)会匹配当前车辆绑定的司机,加上Q(vehicle__isnull=True)的未绑定司机,就能同时显示这两类选项,既保留了原有关联的司机,又能选择其他未绑定的司机。

内容的提问来源于stack exchange,提问作者Andi Fathul Mukminin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:04