gpt4 book ai didi

django - 新手 : Django : Adding calculated results to Queryset before passing to template

转载 作者:行者123 更新时间:2023-12-04 05:27:39 25 4
gpt4 key购买 nike

这是我与 Django 新生活的第二天,请原谅我的问题很简单。

我有一个现有的数据库表(只读访问),我已经使用 url、 View 、模型和所有好东西成功地在网页上显示了它的内容。

我面临的挑战是表格不包含我需要显示的所有信息。该表包含带有列、sampletime、samplevalue、sampleresult 的测试结果。我需要根据我从这些列计算的内容来显示不同的数据。

我的最终目标是使用 flotr 将此信息显示为时间序列图.现在我很乐意将我需要的数据转储到网页上的表格中。(这样我就可以将结果数据可视化)

我想传递给模板的是,

  • jssampletime(采样时间日期时间
    对象转换为 javascript 纪元
    女士)
  • 结果值(基于样本结果是好还是坏,样本值的滚动总和+-)

  • 我可以使用 def 函数创建 jssampletime 和 resultvalue 。我想我会将这些功能添加到 views.py

    我想我需要做什么来遍历 views.py 中的查询集并将结果存储在我传递给模板的字典列表中。像这样的东西(代码未测试)。

    View .py
    # views.py
    # Sudo code to assit in asking the question
    from django.shortcuts import render_to_response
    from thing.reporter.models import Samples

    def _datetime_to_js(sampletime):
    #.. date conversion epoch magic
    return jsd_result

    def _rolling_sum(samplevalue,sampleresult):
    #.. summing magic
    return sum_result

    def dumptable(request): # The def that is called by urls.py
    object_list = Samples.objects.all()

    list_for_template = []
    for row in object_list:
    jssampletime = _datetime_to_js(row.sampletime)
    resultvalue = _rolling_sum(row.samplevalue,row.sampleresult)
    list_for_template.append({'jssampletime':jssampletime,'resultvalue':resultvalue})

    return render_to_response('tabledump.html', {'result_list': list_for_template})

    表转储.html
    # tabledump.html template
    {% block content %}
    <h2>Results dumped to page for testing</h2>
    <ul>
    <table>
    {% for result in result_list %}
    <tr>
    <td>{{ result.jssampletime }}</td>
    <td>{{ result.resultvalue }}</td>
    </tr>
    {% endfor %}
    </table>
    </ul>
    {% endblock %}

    我认为这会起作用,但我不确定它是否是 Django MVC 方式。

    是不是我,
  • 通过对查询集结果进行交互来计算我在 views.py 中需要的结果?
  • 将我的结果作为模板传递给模板
    dict 列表(是一个查询集超过
    那)?

  • 我想我正在寻找一些方向和代码提示。
    我走在正确的道路上吗?有没有更好的办法 ?

    最佳答案

    如果您显示的信息在模型中,为什么不向模型添加属性/方法来显示您需要从中获取的任何信息?然后,您可以将实际模型列表/查询集传递给您的模板,并将这些方法作为属性调用。

    例如

    class MyModel(models.Model):
    model_field = models.CharField(max_length=255)

    @property
    def calculated_field(self):
    return self._do_calculation(self.model_field)

    如果您需要访问循环中的状态变量,请不要忘记您可以将任何属性附加到 python 对象。这非常有用。所以在你看来,你可能有这样的事情:
    for row in object_list:
    # update some variable we want to use in the template
    row.newly_added_field = run_calculation(row, somevariable)

    然后可以在模板中访问这两个:
    {% for result in result_list %}
    <tr>
    <!-- some stuff that displays the model directly -->
    <td>{{ result.calculated_field}}</td>
    <td>{{ result.newly_added_field}}</td>
    </tr>
    {% endfor %}

    关于django - 新手 : Django : Adding calculated results to Queryset before passing to template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1483424/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com