我正在遵循Django中的一个教程,在该教程中,我找到了一个for循环来获取模型中的实体,该模型实际上是在过滤数据。
下面是模型(models.py)
class Brand(models.Model):
name = models.CharField(max_length=30)
origin = models.CharField(max_length=50)
class Model(models.Model):
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
model_name = models.CharField(max_length=30)
class Review(models.Model):
article = models.CharField(max_length=2000)
label_model = models.ManyToManyField(Model)
以下是views.py
from django.views import generic
from .models import Brand
from .models import Model
from .models import Review
class BrandListView(generic.ListView):
template_name = 'phonereview/brands.html'
context_object_name = 'all_phone_brands'
def get_queryset(self):
return Brand.objects.all()
class ModelDetailView(generic.DetailView):
model = Brand
template_name = 'phonereview/models.html'
class ReviewDetailView(generic.DetailView):
model = Model
template_name = 'phonereview/reviews.html'
下面是模板 1)列出品牌(tempates / appname / brands.html)
<ul>
{% for brand in all_phone_brands %}
<li>
<a href = "{% url 'phonereview:models' brand.slug %}">
{{ brand.name }}
</a>
</li>
{% endfor %}
</ul>
这里all_phone_brands
来自views.py。
2)列出手机型号的模板
<ul>
{% for model_item in brand.model_set.all %}
<li>
<a href="{% url 'phonereview:reviews' model_item.slug %}">
{{ model_item.model_name }}
</a>
</li>
{% endfor %}
</ul>
即使代码可以工作,我也不确定将brand.model_set.all
放在正确的位置。我猜想,必须有一个更好的方法。
有人可以帮助我以适当的方式做到吗?
答案 0 :(得分:0)
使用prefetch_related来优化查询,
css=tr:nth-child(2) > td > table > tbody > tr:nth-child(3) > td:nth-child(1)
有关更多详细信息,请参见documentation。