Как получить доступ к элементу модели после объединения в Django?
Мой пост похож на этот, только я не могу получить доступ к элементу : Stackoverflow : Как сделать внутреннее соединение в django?
Я хочу отобразить в Html номер локомотива и имя клиента, который владеет этим локомотивом. Но они находятся в разных таблицах.
Вот мой models.py
class Client(models.Model):
client_name = models.CharField(max_length=100, null=False, unique=True)
def __str__(self):
return self.client_name
class Locomotive(models.Model):
locomotive_number_id = models.CharField(max_length=50, null=False, unique=True)
locomotive_asset_id = models.CharField(max_length=50, null=False, unique=True)
locomotive_client = models.ForeignKey(Client, null=False, on_delete=models.CASCADE)
def __str__(self):
return self.locomotive_number_id
Вот мой views.py
def settings(request):
my_clients = Client.objects.values_list('client_name', flat=True)
my_locomotives = Locomotive.objects.select_related('locomotive_client')
return render(request, 'home/settings.html', context={"my_clients": my_clients,"my_locomotives": my_locomotives})
если я печатаю my_locomotives.query, то получаю следующее :
print(str(my_locomotives.query))
SELECT
"foo_bar_locomotive"."id",
"foo_bar_locomotive"."locomotive_number_id",
"foo_bar_locomotive"."locomotive_asset_id",
"foo_bar_locomotive"."locomotive_client_id",
"something1_something2_client"."id",
"something1_something2_client"."client_name"
FROM "foo_bar_locomotive"
INNER JOIN "something1_something2_client" ON ("foo_bar_locomotive"."locomotive_client_id" = "something1_something2_client"."id")
Вот html-код, который позволяет мне отображать список локомотивов. За исключением того, что я не могу отобразить имя клиента, которому принадлежит локомотив.
{% for elements in my_locomotives %}
<option value="{{elements}}">{{elements}} - {{elements.client_name}}</option>
{% endfor %}
Как я могу сделать, чтобы отобразить это:
Locomotive N° 550XXXYY - CUSTXXXYY
Если я правильно понял, чего вы хотите добиться, то вам просто нужно сделать elements.locomotive_client.client_name
в вашем шаблоне, чтобы получить имя клиента. Тогда у вас получится что-то вроде этого :
{% for elements in my_locomotives %}
<option value="{{elements}}">Locomotive N°{{elements.locomotive_number_id}} - {{elements.locomotive_client.client_name}}</option>
{% endfor %}