как получить плоское значение из muitiple values_list? База данных Джанго

Я получаю данные postgresql со своего сервера и заполняю таблицу ниже. Я смог присоединиться к 3 разным таблицам и получить от них столбцы, которые мне нужны.

Однако это дает мне неформатированный объект. Есть ли способ заполнить таблицу, используя объединенный запрос, один за другим?

введите здесь описание изображения

введите здесь описание изображения

просмотры.py

 vlan_query_results = Vlans.objects.select_related('vlan_id').values_list('name', 'gateways__vip', 'gateways__backup', 'gateways__master', 'gateways__nat', 'gateways__vhid', 'subnets__dhcp', 'subnets__dns').order_by('vlan_id')

шаблон

 {% for object in vlan_query_results %}
    <tr  #id='items-table'>
      <th scope="row" class="checkbox-row"><input type="checkbox" name="item" /></th>
        <th scope="row">{{ forloop.counter }}</th>


     <td class="item"> {{object }}</td>
 <td class="item"> </td>

    </tr>
{% endfor %}

person Angie    schedule 06.07.2018    source источник


Ответы (1)


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

from rest_framework import serializers

class VlansSerializer(serializers.ModelSerializer):
    gateways_vip = serializers.ReadOnlyField(source='gateways__vip')
    gateways_backup = serializers.ReadOnlyField(source='gateways__backup')
    gateways_master = serializers.ReadOnlyField(source='gateways__master')
    gateways_nat = serializers.ReadOnlyField(source='gateways__nat')
    gateways_vhid = serializers.ReadOnlyField(source='gateways__vhid')
    subnets_dhcp = serializers.ReadOnlyField(source='subnets__dhcp')
    subnets_dns = serializers.ReadOnlyField(source='subnets__dns')

    class Meta:
    model = Vlans
    fields = ('name', 'gateways_vip', 'gateways_backup', 'gateways_master', 'gateways_nat', 'gateways_vhid', 'subnets_dhcp', 'subnets_dns')

В вашем views.py: vlan_query_results = VlansSerializer(Vlans.objects.all(), many=True).data

В вашем html:

{% for object in vlan_query_results %}
<tr>
  <th scope="row" class="checkbox-row">
     <input type="checkbox" name="item" />
  </th>
  <th scope="row">{{ forloop.counter }}</th>
  <td class="item">{{object.name}}</td>
  <td class="item">{{object.gateways_vip}}</td>
</tr>
{% endfor %}

Вы должны добавить остальные теги <td></td> аналогичным образом. Кроме того, вы не можете добавить #id='items-table' к <tr>, поскольку он находится в цикле, а идентификаторы должны быть уникальными на html-странице.

Надеюсь это поможет. :)

person Ruhi123    schedule 06.07.2018
comment
Большое спасибо :) Я постараюсь и дам вам знать! - person Angie; 11.07.2018