如何从多个 values_list 中获取固定值? Django数据库

how to get flat value from muitiple values_list? Django database

我正在从我的服务器获取 postgresql 数据并填写下面的 table。 我能够加入 3 个不同的 table 并从中获取我想要的列。

但是,它给了我 none 格式的对象。有什么方法可以使用连接查询一个一个地填写 table..?

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

也许可以使用 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 页面中是唯一的。

希望这对您有所帮助。 :)