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
我正在尝试让这个模板调用一个函数,该函数过去在多对多关系中起作用。这次是多对一
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