Revision 883c1f94 snf-cyclades-app/synnefo/api/networks.py

b/snf-cyclades-app/synnefo/api/networks.py
87 87

  
88 88
    user_networks = Network.objects.filter(Q(userid=request.user_uniq) |
89 89
                                           Q(public=True))\
90
                                   .prefetch_related("subnets")
90
                                   .order_by('id')
91
    if detail:
92
        user_networks = user_networks.prefetch_related("subnets")
91 93

  
92 94
    user_networks = api.utils.filter_modified_since(request,
93 95
                                                    objects=user_networks)
94 96

  
95 97
    network_dicts = [network_to_dict(network, detail)
96
                     for network in user_networks.order_by('id')]
98
                     for network in user_networks]
97 99

  
98 100
    if request.serialization == 'xml':
99 101
        data = render_to_string('list_networks.xml', {
......
167 169
    d = {'id': str(network.id), 'name': network.name}
168 170
    d['links'] = util.network_to_links(network.id)
169 171
    if detail:
172
        # Loop over subnets. Do not perform any extra query because of prefetch
173
        # related!
174
        subnet_ids = []
175
        for subnet in network.subnets.all():
176
            subnet_ids.append(network.id)
177

  
170 178
        state = "SNF:DRAINED" if network.drained else network.state
171 179
        d['user_id'] = network.userid
172 180
        d['tenant_id'] = network.userid
......
177 185
        d['public'] = network.public
178 186
        d['router:external'] = network.external_router
179 187
        d['admin_state_up'] = True
180
        d['subnets'] = list(network.subnets.values_list('id', flat=True))
188
        d['subnets'] = subnet_ids
181 189
        d['SNF:floating_ip_pool'] = network.floating_ip_pool
182 190
    return d
183 191

  

Also available in: Unified diff