Django: невозможно получить поля моделей для отображения в шаблоне - PullRequest
0 голосов
/ 16 января 2020

Я не могу получить имя кота и тип котенка из моделей Cat и Kitten в шаблон.

Это мой model.py

class Cat(models.Model):
    cat_name = models.CharField(max_length=200)

    def __str__(self):
        return self.cat_name

class Kitten(models.Model):
    cat = models.ForeignKey(Cat, on_delete=models.CASCADE, related_name='kittens')
    kitten_type = models.CharField(max_length=200)

    def __str__(self):
        return self.kitten_type

Мой views.py

class CatViews(generic.ListView):
    model = Cat
    template_name = 'polls/cats.html'


class CatDetail(generic.DetailView):
    model = Kitten
    template_name = 'polls/kitten.html'

Мой urls.py


urlpatterns = [
    path('cats/', views.CatViews.as_view(), name='catlist'),
    path('cats/<int:pk>/', views.CatDetail.as_view(), name='catdetail'),
]

И, наконец, polls / kitten. html

<h3>{{cat.cat_name}}</h3>

{% for kitty in cat.kittens.all %}
    <p>{{ kitty.kitten_type }}</p>
{% endfor %}

URL работает, я просто не могу отобразить поля из моделей в соответствующие им элементы html. Чего мне не хватает?

Ответы [ 3 ]

1 голос
/ 16 января 2020

Разобрался. Мне пришлось установить CatDetailView для модели Cat, а не для модели Kitten.

Окончательный код:

class CatDetail(generic.DetailView):
    model = Cat
    template_name = 'polls/kitten.html'

0 голосов
/ 16 января 2020

Изменить вас views.py со следующими

class CatViews(generic.ListView):
    model = Cat
    context_object_name = 'cat'
    template_name = 'polls/cats.html'

Изменить polls/kitten.html

<h3>{{cat.cat_name}}</h3>

{% for kitty in cat.kittens.all %}
    <p>{{ kitty.kitten_type }}</p>
{% endfor %}

РЕДАКТИРОВАТЬ

Дополнительно изменить Вы CatDetail

class CatDetail(generic.DetailView):
    model = Kitten
    context_object_name = 'kittens'
    template_name = 'polls/kitten.html'

РЕДАКТИРОВАТЬ 2

Измените polls/kitten.html на это.

<h3>{{cat.cat_name}}</h3>

{% for kitty in cat.catdetail.all %}
    <p>{{ kitty.kitten_type }}</p>
{% endfor %}
0 голосов
/ 16 января 2020
class CatViews(generic.ListView):
    model = Cat
    template_name = 'polls/cats.html'
    context_object_name='cat'

А ваши опросы / кошки. html были бы как,

<h3>{{cat.cat_name}}</h3>

{% for kitty in cat.kittens.all %}
<p>{{ kitty.kitten_type }}</p>
{% endfor %}
...