Как сделать обратный набор запросов на основе набора ключей forgen в django
это немного сложно, вот 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))