我试图让这个模板调用一个过去曾与多对多关系起作用的函数。这次是多对一的。
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 }}
确实只显示一种风格,而不是所有风格。我相信这是关于实例的事情。
答案 0 :(得分:3)
首先,当您使用Django Generic List View时,模板中的对象列表称为object_list
。查看上面的链接,查看django文档。
为了显示索引模板中的所有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