将“跟随关系'向后'”输出到模板

Posted

技术标签:

【中文标题】将“跟随关系\'向后\'”输出到模板【英文标题】:Outputting "Following relationships 'backward'" to a template将“跟随关系'向后'”输出到模板 【发布时间】:2022-01-22 05:21:13 【问题描述】:

本周早些时候我开始使用 Django 并观看了一些教程,并认为我会尝试将我用 php 制作的网站切换到更新的网站。我在周末遇到了一些问题并设法获得了一些帮助,但仍然存在一个问题。

我已经有一个现有的数据库,其中包含一些我想要检索以显示在网站上的信息。信息通过数据库进行修改,因此 Django 不必处理任何这些 - 只需将结果显示到引导模板文件。

因此,本质上 Django 将有 2 个模型 - 每个相关的数据库表一个。

第一个模型与产品有关

class Bikes(models.Model):
    bikempn = models.CharField(primary_key=True, max_length=50)
    bikecategory = models.CharField(max_length=50)
    bikeyear = models.CharField(max_length=4)
    bikebrand = models.CharField(max_length=50)
    bikedesc = models.CharField(max_length=255)
    bikesize = models.CharField(max_length=50)
    bikecolour = models.CharField(max_length=255)
    bikeurl = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'bikes'

第二种模式与他们的预计到达日期有关。该模型将表示一个数据库视图,该视图执行一些逻辑,将在途的产品与保留的匹配项目的数量进行比较。

型号是:

class Eta(models.Model):
    bikempn = models.ForeignKey(Bikes, on_delete=models.CASCADE, primary_key = True, db_column='bikempn', related_name='etas')
    eta = models.DateField()

    class Meta:
        managed = False
        db_table = 'bike_eta'

这个网站的想法本质上是让人们知道他们感兴趣的产品是否会很快到来。

我一直在尝试提出一个可以显示所有链接信息的查询,但是我在网上找到的所有内容都不太奏效。一路走来,我得到了一些帮助,但又碰壁了,坦率地说,还没有弄清楚这一点感到很愚蠢。

所以,目前我有一个查询是:

kidsquery = Bikes.objects.filter(bikecategory='kids').select_related('etas')

这只会过滤掉归类为儿童自行车的自行车,并且应该将两个模型结合在一起。

我显示此信息的相关模板是:

% extends 'base.html' %

% block content %
    % if kidsquery %
    <div class="table-responsive">
        <table class="table table-striped table-hover table-bordered table-sm">
            <thead class="table-dark">
                <tr>
                    <th scope="col">Year</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Model</th>
                    <th scope="col">Colour</th>
                    <th scope="col">Size</th>
                    <th scope="col">Part#</th>
                    <th scope="col">ETA</th>
                </tr>
            </thead>
         
            % for info in kidsquery %
            <tr>
                <td> info.bikeyear </td>
                <td> info.bikebrand </td>
                % if info.bikeurl %
                <td><a href=" info.bikeurl " target="_blank"> info.bikedesc </a></td>
                % else %
                <td> info.bikedesc </td>
                % endif %
                <td> info.bikecolour </td>
                <td> info.bikesize </td>
                <td> info.bikempn </td>
                % for arrival in info.etas.all %
                % if arrival is null %
                <td>Contact Us</td>
                % else %
                <td> arrival|date:"F Y" </td>
                % endif %
                % endfor %

            </tr>
            % endfor %
            
        </table>
    </div>
    % endif %
    
% endblock %

有谁知道为什么我无法在最后一列中显示任何内容(它应该显示 eta 日期值(或失败,“联系我们”结果)?

【问题讨论】:

【参考方案1】:

在模板中提取信息的正确解决方案:

% extends 'base.html' %

% block content %
    % if kidsquery %
    <div class="table-responsive">
        <table class="table table-striped table-hover table-bordered table-sm">
            <thead class="table-dark">
                <tr>
                    <th scope="col">Year</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Model</th>
                    <th scope="col">Colour</th>
                    <th scope="col">Size</th>
                    <th scope="col">Part#</th>
                    <th scope="col">ETA</th>
                </tr>
            </thead>
         
            % for info in kidsquery %
            <tr>
                <td> info.bikeyear </td>
                <td> info.bikebrand </td>
                % if info.bikeurl %
                <td><a href=" info.bikeurl " target="_blank"> info.bikedesc </a></td>
                % else %
                <td> info.bikedesc </td>
                % endif %
                <td> info.bikecolour </td>
                <td> info.bikesize </td>
                <td> info.bikempn </td>
                % for arrival in info.etas.all %
                % if arrival.eta %
                <td> arrival.eta|date:"F Y"  </td>
                % else %
                <td>Contact Us</td>
                % endif %
                % endfor %

            </tr>
            % endfor %
            
        </table>
    </div>
    % endif %
    
% endblock %

交换支票,并补偿缺少日期。

【讨论】:

以上是关于将“跟随关系'向后'”输出到模板的主要内容,如果未能解决你的问题,请参考以下文章

刀片模板中的多对多关系中的 Laravel 嵌套查询

访问输出到 Excel 模板和格式

C++ 智能指针和指针到指针输出 API。模板化的“包装器”

捕获 JSP 输出,保存到文件

django - pisa:将图像添加到 PDF 输出

将输出映射到 Restkit 中的核心数据时崩溃