django - 在Django模板中的if条件中使用外键值
问题描述
我有一个模型,里面有一个外键。像这样:
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 %}
但我的内心如果不工作!
解决方案
您可以使用 访问对象的相关Chart
s ,因此您可以通过以下方式实现:Category
my_category.chart_set
def drawcharthome(request):
allcats = Category.objects.prefetch_related('chart_set')
return render(request, 'charts/drawcharthome.html',{'allcats':allcats})
并在模板中渲染它:
{% for cat in allcats %}
{% for chart in cat.chart_set.all %}
<li>
<a href="{{ chart.api_url }}"> {{ chart.titleFA }}</a>
</li>
{% endfor %}
{% endfor %}
[ .prefetch_related(…)
Django-doc]不是必需的,但它将Chart
使用单个查询加载所有相关的 s 并在 Django/Python 层中进行连接,这将导致两个查询而不是N+1进行一个查询获取Category
s 和N次查询以获取每个chart_set
类别的相关信息。
推荐阅读
- css - 我正在使用 hostgator 并且在我的样式表上它说这里不允许导入错误
- azure - Azure 数据工厂中的条件接收器
- postgresql - SQL - 计算另一个表上每个结果的实例数
- spring-boot - 更改用于运行@StreamListener 方法的线程名称
- .net - 您可以在 .NET 3.1 旁边运行 .NET Core 2.2 应用程序吗?
- html - 从 WEB FORM 将图像上传到 Google 电子表格
- reactjs - Redux Thunk 操作未执行
- python - 不和谐机器人有没有办法检查不和谐硝基礼品代码是否有效?
- docker - Docker build ERROR: 找不到满足要求的版本torch==1.5.1
- android - 从 Xamarin Android 中的另一个类访问主类中定义的 EditText