Django DecimalField返回“None”而不是空值

时间:2010-03-26 16:21:18

标签: django null

对于一个空白的十进制字段,有没有办法强制django显示任何内容而不是“None”?

在我的模板中,我显示了特定字段的所有值的列表。每个值都超链接到一个页面,该页面显示在该值上过滤的查询结果。但是因为有一些空值的条目,我的列表包括实际的DecimalField条目和所有空的条目的“无”。当用户单击None时,django会抛出验证错误,因为您无法使用字符串查询DecimalField。

我可以编写if语句检查Nones的所有十进制字段实例并跳过它们,但这远非优雅的解决方案。有什么建议吗?

这是代码的一部分,尽管还有其他模板以稍微不同的方式派生None值:

{% for item in choices %}
    <a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endfor %}

2 个答案:

答案 0 :(得分:15)

如果您不想过滤值列表,可以使用内置的defaultdefault_if_none模板过滤器来控制显示的内容,但是通过上面给出的示例,您可以d最终得到空链接。

{{ item|default_if_none:"" }}

鉴于您需要对每个值进行超链接和查询,以及如果没有给出数字将显示错误的视图,我会在您将列表传递给模板上下文时对其进行过滤:

{"choices": [choice in choices where choice is not None]}

答案 1 :(得分:0)

好的,所以我们假设你让Django返回一个空字符串,而不是空值。

现在这段代码会发生什么:

{% for item in choices %}
<a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endfor %}

你要么:

  • 获取一堆空链接(<a href="/field_choice/"></a>
  • 或者url反向机制的异常(因为需要位置参数)。

你不想使用的方法很多(!)更优雅:

{% for item in choices %}
    {% if item %}
        <a href={% url app_views.field_choice item %}>{{ item }}</a><br>
    {% endif %}
{% endfor %}

当然,您也可以事先建立一个没有空项目的列表:在视图中,甚至使用a custom manager