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

Django中ForeignKey类型字段filter反向查询实现问题求助

问题原因

你之前的查询失效核心原因是:RoomBookings的HotelName字段从存储字符串的CharField改为关联Hotel模型的外键后,字段存储内容从酒店名称字符串变为Hotel表的主键ID,原有直接匹配字符串的查询逻辑不再适用。你之前尝试的失败写法主要存在两个问题:

  • 部分查询条件的后缀运算符少写了一个下划线,比如_exact应为__exact
  • 额外多加了不存在的__Hotel中间层级,HotelName外键直接关联Hotel模型,不需要额外加__Hotel跳转

正确查询写法

最优写法(已拿到完整hotel实例时)

直接用外键关联的实例做匹配,不需要跨表查字符串,性能更高且不易出错:

# 单条件查询
queryset2 = RoomBookings.objects.filter(HotelName=hotel)

# 对应你之前的全条件查询
RoomBookings.objects.filter(
    HotelName=hotel,
    RoomType__icontains=hotel.RoomType,
    ArrivalDate__lt=RoomBookingsForm['DepartureDate'],
    DepartureDate__gt=RoomBookingsForm['ArrivalDate']
)

模糊匹配写法(只有酒店名称字符串时)

如果需要根据酒店名称做模糊查询,正确的跨表语法为外键字段名__关联模型字段名:

queryset2 = RoomBookings.objects.filter(HotelName__HotelName__icontains=hotel.HotelName)

额外优化建议

建议把RoomBookings里的外键字段HotelName重命名为hotel,避免和Hotel模型里的HotelName字段混淆,降低后续维护的出错概率。

内容的提问来源于stack exchange,提问作者Ross Symonds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:54:04