在 Django 模板的 if 条件中使用外键值
using Foreign Key value in if condition in Django Template
我有一个模型,其中有一个外键。像这样:
class Chart(models.Model):
titleFA = models.CharField(max_length=200)
titleEN = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.PROTECT, blank=True)
与此模型相关的类别:
class Category(models.Model):
nameEN = models.CharField(max_length=200, default="")
这是视图文件:
def drawcharthome(request):
allcharts = Chart.objects.all()
allcats = Category.objects.all()
return render(request, 'charts/drawcharthome.html',{'allcharts': allcharts,'allcats':allcats})
我需要检查模板中两个参数的相等性:
{% for cat in allcats %}
{% for chart in allcharts %}
{% if chart.category == cat.nameEN %}
<li>
<a href="{{ chart.api_url }}"> {{ chart.titleFA }}</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
但是我内心的if不行!
您可以使用 my_category.chart_set
访问 Category
对象的相关 Chart
,因此您可以通过以下方式实现:
def drawcharthome(request):
allcats = Category.objects<strong>.prefetch_related('chart_set')</strong>
return render(request, 'charts/drawcharthome.html',{'allcats':allcats})
并在模板中渲染:
{% for cat in allcats %}
{% for chart in cat<strong>.chart_set.all</strong> %}
<li>
<a href="{{ chart.api_url }}"> {{ chart.titleFA }}</a>
</li>
{% endfor %}
{% endfor %}
.prefetch_related(…)
[Django-doc] 不是必需的,但它会用一个查询加载所有相关的 Chart
并在 Django/Python 层中进行连接,这将导致两个查询而不是 N+1,您在其中进行一次查询以获取 Category
s,而 N 查询每次获取相关chart_set
个类别。
我有一个模型,其中有一个外键。像这样:
class Chart(models.Model):
titleFA = models.CharField(max_length=200)
titleEN = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.PROTECT, blank=True)
与此模型相关的类别:
class Category(models.Model):
nameEN = models.CharField(max_length=200, default="")
这是视图文件:
def drawcharthome(request):
allcharts = Chart.objects.all()
allcats = Category.objects.all()
return render(request, 'charts/drawcharthome.html',{'allcharts': allcharts,'allcats':allcats})
我需要检查模板中两个参数的相等性:
{% for cat in allcats %}
{% for chart in allcharts %}
{% if chart.category == cat.nameEN %}
<li>
<a href="{{ chart.api_url }}"> {{ chart.titleFA }}</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
但是我内心的if不行!
您可以使用 my_category.chart_set
访问 Category
对象的相关 Chart
,因此您可以通过以下方式实现:
def drawcharthome(request):
allcats = Category.objects<strong>.prefetch_related('chart_set')</strong>
return render(request, 'charts/drawcharthome.html',{'allcats':allcats})
并在模板中渲染:
{% for cat in allcats %}
{% for chart in cat<strong>.chart_set.all</strong> %}
<li>
<a href="{{ chart.api_url }}"> {{ chart.titleFA }}</a>
</li>
{% endfor %}
{% endfor %}
.prefetch_related(…)
[Django-doc] 不是必需的,但它会用一个查询加载所有相关的 Chart
并在 Django/Python 层中进行连接,这将导致两个查询而不是 N+1,您在其中进行一次查询以获取 Category
s,而 N 查询每次获取相关chart_set
个类别。