Django模板 - 显示两个模型的数据

时间:2015-08-29 13:10:09

标签: django django-models django-templates django-views

我希望有一个简单的网站,我可以看到汽车的状态。 我们假设我有两个表: 汽车:

|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

我希望在我的网站上拥有这样的内容:

|            |        mileage|       insurance|
|            |---------------------------------
|            |{{car.mileage}}|{{car.insurance}}
| {{car.car}}|---------------------------------
|            |            Faults
|            |---------------------------------
|            | << list of faults for current {{car.id}}>>
-------------------------------------------------------
<<next car>>

我知道如何获得简单的表格,但对我来说问题是每个当前汽车的故障的第二个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  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>

对于上述部分的回答,出现了新的问题: 我的故障模型有布尔字段,表示故障是否被修复。我想只显示过滤的项目,而且我希望将此列表作为最后添加的三个快速预览。 一般来说,我希望过滤项目,而不是只展示其中的一些。有办法做到这一点吗? Rigth现在我使用{%if ..%}过滤项目,但不知道如何限制它们而不是列出所有项目。

1 个答案:

答案 0 :(得分:1)

使用套装! 你想得到所选Pojazdy的所有Pojazdy_usterki:

<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>