Django DecimalField返回“;无”;而不是空值

Django DecimalField返回“;无”;而不是空值,django,null,Django,Null,对于保留为空的十进制字段,有没有办法强制django不显示任何内容而不是“无” 在我的模板中,我显示了一个特定字段的所有值的列表。每个值都超链接到一个页面,该页面显示根据该值筛选的查询结果。但是,因为有些条目的值为null,所以我的列表中包含实际的DecimalField条目,对于所有为空的条目,“无”。当用户单击None时,django会抛出一个验证错误,因为您无法使用字符串查询DecimalField 我可以编写if语句来检查十进制字段的所有实例是否为Nones并跳过它们,但这远不是一个优雅

对于保留为空的十进制字段,有没有办法强制django不显示任何内容而不是“无”

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

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

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

{% for item in choices %}
    <a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endfor %}
{%用于选项%]中的项

{%endfor%}
如果不想筛选值列表,可以使用内置或模板筛选器来控制显示内容,但在上面给出的示例中,最终会出现空链接

{{ item|default_if_none:"" }}
考虑到您需要对每个值和视图进行超链接和查询,如果没有给定数字,该视图将显示错误,我会在您将列表传递到模板上下文时对其进行筛选:

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

好的,假设您让Django返回一个空字符串,而不是od None作为空值

那么现在这段代码会发生什么呢

{% for item in choices %}
<a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endfor %}
{%用于选项%]中的项

{%endfor%}
你可以:

  • 获取一堆空链接(
  • 或者url反向机制的异常(因为位置参数是必需的)
您不想使用的方法更(!)优雅:

{% for item in choices %}
    {% if item %}
        <a href={% url app_views.field_choice item %}>{{ item }}</a><br>
    {% endif %}
{% endfor %}
{%用于选项%]中的项
{%if item%}

{%endif%} {%endfor%}

当然,您也可以自由地构建一个列表,而不必事先使用空项:在视图中,甚至使用。

由于没有一个列表只显示一次,因此我只会得到一个用户看不见的空链接。将1 if语句添加到循环中可以,但是如果/当我扩展模板以专门引用各个字段(而不是动态循环),我必须为每个可能包含None的字段引用编写if语句。依赖用户看不到的链接是非常糟糕的做法,只是因为它们是空的。它们仍然存在,而且在很多情况下它们都会被使用。我更改了视图以过滤掉列表中没有的值。然后,对于未预筛选的模板,我使用了默认的\u if\u none过滤器