如何从多个values_list获得固定价值? Django数据库

时间:2018-07-06 16:43:11

标签: django django-templates django-database

我正在从服务器中获取postgresql数据,并填写下表。 我能够连接3个不同的表并从中获取我想要的列。

但是,它给了我没有格式的对象。有什么办法可以使用联接查询一个接一个地填写表格吗??

enter image description here

enter image description here

views.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 %}

1 个答案:

答案 0 :(得分:0)

也许应该改用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>中,因为它处于循环中,并且id在html页面中应该是唯一的。

希望这会有所帮助。 :)