Django: шаблон для вывода списка данных из 2 моделей, связанных друг с другом

У меня есть 2 модели. Одна из них является первичным ключом другой, как показано в примере ниже.

class Product(models.Model):
    name = models.CharField(max_length=32, unique=True)
    power = models.IntegerField(default=0)


class Price(models.Model):
    product = models.OneToOneField(Product, on_delete=models.PROTECT, primary_key=True)
    price = models.IntegerField(default=0)

Я хочу создать шаблон, который отображает данные из 2 моделей. Например:

List of Products

product: P_A    power: 1000W   price: $
product: P_B    power: 1500W   price: $
product: P_C    power: 2000W   price: $

Я предпринял несколько попыток, не добившись успеха в отображении цен. Одной из них был следующий шаблон и вид:

    <h2>List of Products</h2>
<ul>
    {% for product in list_of_products %}
        <li>product: {{ product.name }} &emsp; &emsp;power: {{ product.power }}W &emsp; price: {{prices.product.price }} $</li>
    {% endfor %}
</ul>

def index(request):
    products = Product.objects.all()
    prices = Price.objects.all()
    return render(request, "index.html", {'list_of_products': products, 'prices': prices})

Спасибо за любую помощь в решении моей проблемы.

Вам не следует передавать в шаблон набор запросов Price, вы можете работать с:

def index(request):
    products = Product.objects.select_related('price')
    return render(request, "index.html", {'list_of_products': products})

Затем в шаблоне вы отображаете это следующим образом:

{% for product in list_of_products %}
    <li>product: {{ product.name }} &emsp; &emsp;power: {{ product.power }}W &emsp; price: {{ product.price.price }} $</li>
{% endfor %}

Однако мне не ясно, почему вы не храните цену в модели Product здесь, а работаете с отдельной моделью.

Вернуться на верх