упражнение 18-8 python cra sh курс - Не могу зациклить - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь l oop через начинки, но код не работает.

модели:

from django.db import models

class Pizza(models.Model):

name = models.CharField(max_length=200)

def __str__(self):
    return self.name

class Toppings(models.Model):

pizza = models.ForeignKey(Pizza, on_delete=models.CASCADE)
name = models.CharField(max_length=200)

class Meta:
    verbose_name_plural = 'toppings'

def __str__(self):
    return self.name

urls.py:

from django.urls import path
from . import views

app_name = 'pizzas'

urlpatterns = [
    path('', views.index, name='index'),
    path('pizzas/', views.pizzas, name='pizzas'),
    path('pizzas/<int:toppings_id>/', views.toppings, name='toppings')
]

просмотров:

from django.shortcuts import render
from .models import Pizza
from .models import Toppings

def index(request):
return render(request, 'pizzas/index.html')

def pizzas(request):

pizzas = Pizza.objects.all()
context = {'pizzas': pizzas}
return render(request, 'pizzas/pizzas.html', context)


def toppings(request, toppings_id):

toppings = Toppings.objects.get(id=toppings_id)
context = {'toppings': toppings}
return render(request, 'pizzas/toppings.html', context)

начинки. html:

{% extends 'pizzas/base.html' %}

{% block content %}

<p>Pizzas: {{ pizza }}</p>
<p>Toppings:</p>
<ul>
{% for topping in toppings %}
  <li>
      <p>{{ topping }}</p>
  </li>
{% empty %}
  <li>There are no toppings</li>
{% endfor %}
</ul>

{% endblock content %}

пиццы. html:

{% extends 'pizzas/base.html' %}

{% block content %}

<p>Pizzas</p>

<ul>
{% for pizza in pizzas %}
  <li>
    <a href="{% url 'pizzas:toppings' pizza.id %}">{{ pizza }}</a>
  </li>
{% empty %}
  <li>
    No pizzas yet duh
  </li>
{% endfor %}
</ul>

{% endblock content %}

Проблема в начинки. html для for l oop, и, возможно, что-то не так с представлениями начинки.

1 Ответ

1 голос
/ 20 февраля 2020

Здесь:

toppings = Toppings.objects.get(id=toppings_id)
context = {'toppings': toppings}

у вас есть одна запись из-за использования get . Вы не можете l oop над одним объектом. Пожалуйста, прочитайте документы об использовании методов. Если вы хотите перечислить все начинки, удалите toppings_id из URL и просмотра и используйте вместо него all():

Toppings.objects.all()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...