首页 > 解决方案 > 如何根据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

有什么帮助吗?

标签: pythondjango

解决方案


试试这个查询:

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))

推荐阅读