Django:无法让模型字段显示在模板中

时间:2020-01-16 00:06:00

标签: django django-templates

我无法从猫和小猫模型中获得猫的名字和小猫的类型。

这是我的模特。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 个答案:

答案 0 :(得分:1)

弄清楚了。我必须将CatDetailView设置为Cat模型,而不是小猫模型。

最终代码:

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

答案 1 :(得分:0)

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

您的polls / cats.html就像

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

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

答案 2 :(得分:0)

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 %}