如何从多个 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 页面中是唯一的。
希望这对您有所帮助。 :)
我正在从我的服务器获取 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 页面中是唯一的。
希望这对您有所帮助。 :)