【问题标题】:How to humanize measurement queries in Django如何在 Django 中人性化测量查询
【发布时间】:2021-07-16 15:54:26
【问题描述】:

我在 Django 中有一个距离查询,并打印了一个带几个小数点的距离。它以测量格式将距离显示为 1023.40258027906 m。我想让这个人类可读。我尝试使用 Decimal 但失败了,因为它不适用于测量对象。测量对象是带有 km、m、cm 等标签的距离对象。通过人性化,我的意思是不超过 2 或 3 个十进制数字。这些是从

导入的
from django.contrib.gis.measure import D
from django.contrib.gis.db.models.functions import Distance 

这是用于生成距离测量的查询集。 查询集:

queryset = Apartment.objects.filter(geom__distance_lte=(user_location, D(km=2))).annotate(distance=Distance('geom', user_location))


 <style type="text/css">
        ul{
            list-style-type: circle;
            margin:0px;
            padding-left: 1em;
        }
    </style>
    <head>
        
    </head>
    <body><strong>Nearby Apartments</strong>
        {% if apartments %}
        <ul>
        {% for apartment in apartments %}
            <li>
            {{ apartment.apt_id }}: {{apartment.distance}}
            </li>
        {% endfor %}
        </ul>
        {% endif %}
    </div> 
    </body>

【问题讨论】:

  • 您从未提及确切“测量对象”是什么(可能来自django.contrib.gis.measure?)以及您所说的人性化究竟是什么意思,请在您的问题中说明。跨度>

标签: django humanize


【解决方案1】:

如果您想将该值四舍五入到特定精度,您可以使用floatformat template filter [Django docs] 来执行此操作。

由于距离是来自django.contrib.gis.measureDistance 对象,您可以通过编写distance.&lt;format_name&gt; 以您喜欢的格式获取距离,例如distance.m 然后你可以使用floatformat

<!-- round to 3 decimal places -->
{{ apartment.distance.m|floatformat:3 }} m

上面链接的文档中显示了更多配置此过滤器输出的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2020-06-05
    • 2012-03-29
    • 2017-04-14
    • 2013-08-12
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多