objects.all() queryset 不适用于模板视图;多对一关系

objects.all() queryset not working with view to template; many-to-one relationship

我正在尝试让这个模板调用一个函数,该函数过去在多对多关系中起作用。这次是多对一

detail.html 模板

{{ icecreamflavor.name.all }}

观点:

    from django.shortcuts import get_object_or_404, render
    from django.views import generic

    from .models import IceCream, IceCreamFlavor

    # Create your views here.


    class IndexView(generic.ListView):
        template_name = 'ice_cream/index.html'
        context_object_name = 'ice_cream_list'

        def get_queryset(self):
            return IceCream.objects.order_by('brand')

    class DetailView(generic.DetailView):
        model = IceCreamFlavor
        template_name = 'ice_cream/detail.html'

2 位模特:

class IceCream(models.Model):
    ice_cream_id = models.AutoField(primary_key=True)
    brand = models.CharField(max_length=200)

    def __unicode__(self):
        return self.brand


class IceCreamFlavor(models.Model): 
    ice_cream_flavor_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    rating = models.DecimalField(max_digits=3, decimal_places=1)
    brand = models.ForeignKey(IceCream)    

    def __unicode__(self):
        return self.name

这是多对一的关系,我相信在我看来,我在 DetailView 的模型中搞砸了。我想使用 objects.all() 方法在详细视图中简单地调用冰淇淋的所有口味。

没有任何反应。本教程中的文档让我有点困惑。 IndexView 工作并显示所有品牌;只需要 DetailView 来调出所有的味道;我稍后会格式化。郑重声明,detail.html 模板中的 {{ icecreamflavor }} 确实只显示了一种风格,而不是全部。我相信这是关于实例的东西..

索引视图

首先,当您使用 Django Generic List View 时,模板中的对象列表称为 object_list。检查以上 link 以查看 django 文档。

因此,要在 Index 模板中显示所有 IceCream 名称,您应该这样做:

{% for item in object_list %}
    {{item.brand}}
{% endfor %}

要访问 IceCream 的 IceCreamFlavors,您应该这样做:

{% for item in object_list %}
    {{item.icecreamflavor_set.all}}      
{% endfor %}

{{item.icecreamflavor_set.all}} <-- 检查我使用的是 icereamflavor_set

当外键是从 IceCreamFlavor 到 IceCream 时,你想从 IceCream 访问到 IceCreamFlavor 你需要添加 _set 到模型的名称。

详细视图

第二个视图是 Django Generic DetailView,因此视图仅向模板发送一项是完全正常的行为。

如果要传递所有项目,则需要将视图从 DetailView 更改为 ListView。

我建议您查看有关 ListView 和 DetailView 的文档,以更好地了解那里发生的事情。

另外我建议你检查一下Django: Backward relationships