【问题标题】:Django template - showing data from two modelsDjango 模板 - 显示来自两个模型的数据
【发布时间】:2015-08-29 13:10:09
【问题描述】:

我想要一个简单的网站,我可以在上面看到汽车的状态。 假设我有两个表: 汽车:

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

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

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

    • 谢谢,我想不通:) {% for usterka in pojazd.pojazdy_usterki_set.all %} {{usterka.usterka}} tr> {% endfor %} 为我工作:)
    猜你喜欢
    • 2020-07-17
    • 2021-10-01
    • 2013-02-17
    • 2017-05-21
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多