python - 如何根据django中的forgen键集进行反向查询集
问题描述
它有点复杂,这里是执行查询的 2 个模型:
class Line(models.Model):
# Relationships
end_station = models.ForeignKey("stations.station", related_name='line_end_station', on_delete=models.CASCADE)
starting_station = models.ForeignKey("stations.station", related_name='line_start_Station',
on_delete=models.CASCADE)
class InLineStation(models.Model):
# Relationships
line = models.ForeignKey("lines.Line", on_delete=models.CASCADE)
in_line_station = models.ForeignKey("stations.station", on_delete=models.CASCADE)
我在请求中得到了一个站对象,我需要根据它过滤线路模型,如果它是一个开始、结束或在线路站..这是我尝试这个的方法:
@api_view(['POST', ])
def do_search_logic(request):
if request.method == 'POST':
from_station_id = request.data['from_station_id']
to_station_id = request.data['to_station_id']
from_station_object = station.objects.get(id=from_station_id)
to_station_object = station.objects.get(id=to_station_id)
Line.objects.filter(Q(starting_station=from_station_object) | Q(end_station=to_station_object) | Q(from_station_object in inlinestations_set)) #this_is_the_tricky_line
有什么帮助吗?
解决方案
试试这个查询:
Line.objects.filter(Q(starting_station=from_station_object) | Q(end_station=to_station_object) | Q(inlinestations_set__in_line_station=from_station_object))
如果您还想包括具有to_station_object
内联车站的线路:
Line.objects.filter(Q(starting_station=from_station_object) | Q(end_station=to_station_object) | Q(inlinestations_set__in_line_station=from_station_object) | Q(inlinestations_set__in_line_station=to_station_object))
推荐阅读
- java - 我的应用下载量意外减少了 10 倍以上
- ruby-on-rails - Bitbucket Pipelines 使用 Capistrano 的设备错误的不适当 ioctl
- web-applications - 解耦的 Web 应用程序的反面是什么?
- firebase - 如何从firebase函数中的firebase存储中获取图像的尺寸?
- php - 拆分日期和时间然后放入其他列
- html - 如何将 Flexbox 转化为特定的方式?
- python - Django模型中的Python Pickle对象
- javascript - Angular 6,从由javascript填充的表单字段中的数据外部更新变量
- php - SammyK laravel Facebook PHP SDK,发布到页面
- jenkins - 有没有办法限制使用“与父母一起提交”提交的 Gerrit 合并事件触发的 Jenkins 构建的数量?