У меня есть 3 таблицы, заполненные из моей прежней БД Postgresql.
Мне удалось получить некоторые данные из таблицы VLAN, но у меня проблемы с получением всех данных из 3 разных таблиц и помещением их в таблицу, которую я создал на рисунке. Я пробовал несколько наборов запросов, таких как список (цепочка (nameOfTables ..))
Не могли бы вы мне помочь? Я приложил изображение стола
Например ,, если я хочу выбрать конкретные столбцы и БД из нескольких таблиц ..
выберите vlans.name, vlans.vlan_id, gateways.vip, gateways.master, gateways.vhid, subnets.subnet, subnets.dhcp из vlans, подсетей, шлюзов, где vlans.vlan_id = 2599 и subnets.vlan_id = vlans. vlan_id и gateways.vlan_id = vlans.vlan_id;
Models.py
from django.db import models
class Gateways(models.Model):
vip = models.GenericIPAddressField(primary_key=True)
vlan = models.ForeignKey('Vlans', models.DO_NOTHING, blank=True, null=True)
master = models.GenericIPAddressField(blank=True, null=True)
backup = models.GenericIPAddressField(blank=True, null=True)
nat = models.GenericIPAddressField(blank=True, null=True)
vhid = models.IntegerField(unique=True, blank=True, null=True)
class Meta:
managed = True
db_table = 'gateways'
class Subnets(models.Model):
subnet = models.TextField(primary_key=True) # This field type is a guess.
vlan = models.ForeignKey('Vlans', models.DO_NOTHING, blank=True, null=True)
dhcp = models.NullBooleanField()
dhcp_start = models.GenericIPAddressField(blank=True, null=True)
dhcp_end = models.GenericIPAddressField(blank=True, null=True)
dns = models.GenericIPAddressField(blank=True, null=True)
class Meta:
managed = True
db_table = 'subnets'
class Vlans(models.Model):
vlan_id = models.IntegerField(primary_key=True)
allocated = models.NullBooleanField()
name = models.TextField(blank=True, null=True)
class Meta:
managed = True
db_table = 'vlans'
Views.py
def niro_list(request):
gateways = Gateways.objects.all()
vlans = Vlans.objects.all()
subnets = Subnets.objects.all()
context = {
'gateways': gateways,
'vlans': vlans,
'subnets': subnets,
}
return render(request, 'niro/niro_list.html', context)
niro_list.html
<div class="table-responsive-sm">
<table class="table">
<thead>
<tr>
<th scope="col"></th>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Type(Scenario)</th>
<th scope="col">Interface</th>
<th scope="col">Vlan ID</th>
<th scope="col">RDP</th>
<th scope="col">Network(CIDR)</th>
<th scope="col">Nat IP</th>
<th scope="col">DNS</th>
<th scope="col">DHCP</th>
<th scope="col">DHCP pool start</th>
<th scope="col">DHCP pool end</th>
<th scope="col">Master IP</th>
<th scope="col">Backup IP</th>
<th scope="col">VHID</th>
</tr>
</thead>
<tbody>
{% for instance in vlans %}
<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">{{ instance.name }}</td>
<td class="item"></td>
<td class="item">{{ instance.vlan_id }} </td>
<td class="item"> </td>
<td class="item"> </td>
<td class="item"> </td>
<td class="item"> </td>
<td class="item"> </td>
<td class="item"> </td>
<td class="item"> </td>
<td class="item"></td>
<td class="item"> </td>
<td class="item"></td>
<td class="item"> </td>
{##}
{# {% empty %}#}
{# <td><p>No contetns</p></td>#}
</tr>
{% endfor %}
</tbody>
</table>
введите описание изображения здесь
Мне удалось объединить их вместе, но проблема в том, что он возвращает весь набор объектов ... Есть ли способ получить одно значение за значением?
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')