В моем приложении Django есть две модели «Элементы» и «Цвета», представляющие таблицы базы данных «элементы» и «цвета». Шаблон Django «mytemplate.html» отображает данные, собранные из базы данных, с помощью цикла «for», распечатывая список элементов с их свойствами.
Одним из полей таблицы 'items' является числовой идентификатор, соответствующий текстовому полю в таблице 'colors'. В настоящее время я могу отображать все элементы с их названиями и цветным числовым идентификатором 'cid' (см. Код ниже).
Но мне нужно напечатать название цвета элемента вместо его 'cid' / 'id' в цикле шаблона. Какой самый эффективный способ добиться этого? Нужна ли мне промежуточная структура данных, изменить базу данных, чтобы определить внешний ключ (items (cid) -> colors (id)), ...?
Я не уверен, что хочу использоватьвнешний ключ (items (cid) -> colors (id)), потому что во время первой вставки элементов 'cid' может быть неопределенным (NULL).
Таблица 'items'
+------+------+------+
| id | cid | name |
+------+------+------+
| 1 | 3 | barZ |
| 2 | 3 | barC |
| 3 | 1 | barE |
| 3 | 2 | barD |
| 4 | 1 | barA |
+------+------+------+
Таблица 'цветов'
+------+---------+
| id | name |
+------+---------+
| 1 | red |
| 2 | white |
| 3 | blue |
+------+---------+
models.py
from django.db import models
class Items(models.Model):
cid = models.IntegerField(blank=True, null=True)
name = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'items'
class Colors(models.Model):
name = models.TextField(blank=False, null=False)
class Meta:
managed = False
db_table = 'colors'
views.py
from django.shortcuts import render
from .models import Items
from .models import Colors
def item_list(request):
items = Items.objects.all().order_by('id')
colors = Colors.objects.all().order_by('name')
return render(request,'mytemplate.html',{
'items': items,
'colors': colors
})
mytemplate.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Foos</title>
</head>
<body>
{% block page_content %}
<table>
{% for item in items %}
<tr>
<td>{{ items.name }}</td>
<td>{{ items.cid }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
</body>
</html>