Django 模板 - 显示来自两个模型的数据
Django template - showing data from two models
我想要一个可以查看汽车状态的简单网站。
假设我有两个 table:
汽车 :
|id|car |mileage| insurance|
----------------------------
| 1|ford| 123456|23-06-2015|
| 2|fiat| 654321|23-06-2015|
还有第二个,错误:
|id|car_id|description|
----------------------------
| 1| 1|stop ligths doesn't work
| 2| 1|power steer needs refill
| 3| 2|etc
| 4| 2|etc
我想在我的网站上显示的内容 table 是这样的:
| | mileage| insurance|
| |---------------------------------
| |{{car.mileage}}|{{car.insurance}}
| {{car.car}}|---------------------------------
| | Faults
| |---------------------------------
| | << list of faults for current {{car.id}}>>
-------------------------------------------------------
<<next car>>
我知道如何变得简单 table,但对我来说问题是针对每辆当前汽车的故障的第二个 forloop (?)。我应该如何在模板中的视图和 forloops 中设置查询集?
我的实际代码与示例略有不同:
models
class Pojazdy(models.Model):
id = models.AutoField(primary_key=True)
pojazd=models.CharField(max_length=15) #car
rejestracja=models.CharField(max_length=15)
aktywny=models.BooleanField(default=True)
def __unicode__(self):
return self.pojazd
class Pojazdy_usterki(models.Model): #faults
id = models.AutoField(primary_key=True)
pojazd=models.ForeignKey(Pojazdy)
usterka=models.CharField(max_length=255) #faults
przebieg=models.IntegerField()
data=models.DateField(auto_now_add=True)
zrobiona=models.BooleanField(default=False)
view
I have some comparisons
def index(request):
pojazdy_qs=Pojazdy.objects.all().filter(aktywny__exact= True)
for pojazd in pojazdy_qs:
(...)
# some operations
(...)
return render(request, 'auta_hist/index.html', {
'pojazdy': pojazdy_qs,
})
还有来自模板的 table:
<table width=100%>
{% for pojazd in pojazdy %}
<tr>
(... some table))
</tr>
<td>
<table border=1 width=100%>
<tr>
<th>Usterki !!! FAULTS !!!</th>
</tr>
{% for ??? %}
<tr>
<td>{{ ?? }} </td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table>
</td>
</tr>
{% empty %}
<tr><td>Brak danych</td></tr>
{% endfor%}
</table>
有了以上部分的答案,出现了新问题:
我的故障模型有布尔字段,代表故障是否已修复。我只想显示过滤后的项目,更重要的是,我希望将此列表作为最后添加的三个项目的快速预览。
一般来说,我希望过滤项目,而不是只显示其中的一小部分。有办法做到这一点吗?现在我用 {% if .. %} 过滤项目,但不知道如何限制它们而不是列出所有项目。
使用套装!
您想要像这样获取所有 Pojazdy_usterki 个选定的 Pojazdy:
<table width=100%>
{% for pojazd in pojazdy %}
<tr>
(... some table))
</tr>
<td>
<table border=1 width=100%>
<tr>
<th>Usterki !!! FAULTS !!!</th>
</tr>
{% for e in pojazdy_usterki_set.all %}
<tr>
<td>{{ e.usterka }} </td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table>
</td>
</tr>
{% empty %}
<tr><td>Brak danych</td></tr>
{% endfor%}
</table>
我想要一个可以查看汽车状态的简单网站。 假设我有两个 table: 汽车 :
|id|car |mileage| insurance|
----------------------------
| 1|ford| 123456|23-06-2015|
| 2|fiat| 654321|23-06-2015|
还有第二个,错误:
|id|car_id|description|
----------------------------
| 1| 1|stop ligths doesn't work
| 2| 1|power steer needs refill
| 3| 2|etc
| 4| 2|etc
我想在我的网站上显示的内容 table 是这样的:
| | mileage| insurance|
| |---------------------------------
| |{{car.mileage}}|{{car.insurance}}
| {{car.car}}|---------------------------------
| | Faults
| |---------------------------------
| | << list of faults for current {{car.id}}>>
-------------------------------------------------------
<<next car>>
我知道如何变得简单 table,但对我来说问题是针对每辆当前汽车的故障的第二个 forloop (?)。我应该如何在模板中的视图和 forloops 中设置查询集? 我的实际代码与示例略有不同:
models
class Pojazdy(models.Model):
id = models.AutoField(primary_key=True)
pojazd=models.CharField(max_length=15) #car
rejestracja=models.CharField(max_length=15)
aktywny=models.BooleanField(default=True)
def __unicode__(self):
return self.pojazd
class Pojazdy_usterki(models.Model): #faults
id = models.AutoField(primary_key=True)
pojazd=models.ForeignKey(Pojazdy)
usterka=models.CharField(max_length=255) #faults
przebieg=models.IntegerField()
data=models.DateField(auto_now_add=True)
zrobiona=models.BooleanField(default=False)
view
I have some comparisons
def index(request):
pojazdy_qs=Pojazdy.objects.all().filter(aktywny__exact= True)
for pojazd in pojazdy_qs:
(...)
# some operations
(...)
return render(request, 'auta_hist/index.html', {
'pojazdy': pojazdy_qs,
})
还有来自模板的 table:
<table width=100%>
{% for pojazd in pojazdy %}
<tr>
(... some table))
</tr>
<td>
<table border=1 width=100%>
<tr>
<th>Usterki !!! FAULTS !!!</th>
</tr>
{% for ??? %}
<tr>
<td>{{ ?? }} </td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table>
</td>
</tr>
{% empty %}
<tr><td>Brak danych</td></tr>
{% endfor%}
</table>
有了以上部分的答案,出现了新问题: 我的故障模型有布尔字段,代表故障是否已修复。我只想显示过滤后的项目,更重要的是,我希望将此列表作为最后添加的三个项目的快速预览。 一般来说,我希望过滤项目,而不是只显示其中的一小部分。有办法做到这一点吗?现在我用 {% if .. %} 过滤项目,但不知道如何限制它们而不是列出所有项目。
使用套装! 您想要像这样获取所有 Pojazdy_usterki 个选定的 Pojazdy:
<table width=100%>
{% for pojazd in pojazdy %}
<tr>
(... some table))
</tr>
<td>
<table border=1 width=100%>
<tr>
<th>Usterki !!! FAULTS !!!</th>
</tr>
{% for e in pojazdy_usterki_set.all %}
<tr>
<td>{{ e.usterka }} </td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table>
</td>
</tr>
{% empty %}
<tr><td>Brak danych</td></tr>
{% endfor%}
</table>