Django DecimalField возвращает «None» вместо пустого значения - PullRequest
3 голосов
/ 26 марта 2010

Есть ли способ заставить django ничего не отображать вместо «None» для десятичного поля, которое оставлено пустым?

В моем шаблоне я показываю список всех значений для определенного поля. Каждое значение имеет гиперссылку на страницу, на которой отображаются результаты запроса, отфильтрованного по этому значению. Но так как есть некоторые записи с нулевым значением, мой список включает в себя фактические записи DecimalField и «None» для всех тех, которые пусты. Когда пользователь нажимает None, django выдает ошибку проверки, потому что вы не можете запросить DecimalField, используя строку.

Я мог бы написать, если операторы проверяют все экземпляры десятичных полей на None и пропускают их, но это далеко не элегантное решение. Любой совет?

Это одна часть кода, хотя есть и другие шаблоны, которые выводят значение None немного другими способами:

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

Ответы [ 2 ]

15 голосов
/ 26 марта 2010

Если вы не хотите фильтровать список значений, вы можете использовать встроенные default или default_if_none фильтры шаблонов, чтобы контролировать то, что отображается, но в приведенном выше примере вы получите пустые ссылки.

{{ item|default_if_none:"" }}

Учитывая вашу потребность в гиперссылке и запросе для каждого значения и в представлении, которое будет отображать ошибку, если не задано число, я отфильтрую список, когда вы передадите его в контекст шаблона:

{"choices": [choice in choices where choice is not None]}
0 голосов
/ 26 марта 2010

Хорошо, допустим, вы заставили Django вернуть пустую строку вместо od None для пустых значений.

Итак, что теперь происходит с этим кодом:

{% 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 %}

Конечно, вы также можете заранее составить список без пустых элементов: в представлении или даже с помощью собственного менеджера .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...