Как объединить два набора запросов по общему полю

У меня есть два приведенных ниже кверисета. У них есть common road_type_id

edges = Edge.objects.values("road_type_id", "edge_id",
                             "name", "length", "speed",
                             "lanes").filter(network=roadnetwork)

roadtypes = RoadType.objects.values("road_type_id",
                                    "default_speed",
                                    "default_lanes"
                                    ).filter(network=roadnetwork)

Я хотел бы заменить в edges :

  • все lanes с None as value по roadtypes.default_lanes
  • все speed с None as value по roadtypes.default_speed

Как я могу это сделать?

Вы можете сделать это следующим образом, сначала собрать все края, собрать тип дороги и заменить значение.

edges = Edge.objects.filter(network=roadnetwork)

for edge in edges:
    road_type = RoadType.objects.get(road_type_id=edge.road_type_id)
    if edge.lanes is None:
        edge.lanes = road_type.default_lanes
    if edge.speed is None:
        edge.speed = road_type.default_speeds
    edge.save()

Вернуться на верх