2010-03-26 6 views
3

공백으로 남겨진 Decimal Field에 대해 Django가 "None"대신 아무 것도 표시하지 않습니까?Django DecimalField는 빈 값 대신 "None"을 반환합니다.

내 템플릿에는 특정 필드의 모든 값 목록이 표시됩니다. 각 값은 해당 값으로 필터링 된 쿼리의 결과를 표시하는 페이지에 하이퍼 링크됩니다. 그러나 null 값을 가진 항목이 있기 때문에 내 목록에는 실제 DecimalField 항목이 포함되어 있으며 비어있는 항목은 모두 "없음"으로 표시됩니다. 사용자가 None을 클릭하면 django는 문자열을 사용하여 DecimalField를 쿼리 할 수 ​​없으므로 유효성 검사 오류를 발생시킵니다.

if 문을 Nones에 대한 소수 필드의 모든 인스턴스를 검사하고 건너 뛸 수 있지만 우아한 해결책은 아닙니다. 어떤 충고? 값 목록을 필터링하지 않으려면

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

답변

15

, 당신은 사용할 수 있습니다 약간 다른 방식으로 없음 값을 도출 다른 템플릿이 있지만

이 코드의 한 부분입니다 내장 된 default 또는 default_if_none 템플릿 필터를 사용하면 표시되는 내용을 제어 할 수 있지만 위 예제에서는 빈 링크가 표시됩니다.

{{ item|default_if_none:"" }} 

각 값과, 당신이 템플릿 컨텍스트에 전달하고 목록을 필터링 할 줄 번호를 부여하지 않을 경우 오류를 보여줄 예정이다보기에 하이퍼 링크 할 필요 및 쿼리를 감안할 때 :

0

좋아요, 그렇다면 빈 값 대신 빈 문자열을 반환하는 Django가 있다고 가정 해 보겠습니다.

이제이 코드에 무슨 : 당신은 하나

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

:

  • 가 URL 역 메커니즘을 형성 빈 링크 (<a href="/field_choice/"></a>)
  • 또는 예외의 무리를 가져옵니다 (위치 인수가 필요하기 때문에).

당신이 사용하지 않는 방법은 훨씬 더 우아 (!) :보기에, 또는 :

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

당신은 또한 사전에 빈 항목이없는 목록을 작성 무료입니다 심지어 a custom manager을 사용합니다.

+0

글쎄, 아무도 한 번 나타나지 않기 때문에 나는 사용자에게 보이지 않는 빈 링크 하나만 얻습니다. 루프에 1 if 문을 추가해도 문제가 없지만 동적으로 반복하는 대신 개별 필드를 구체적으로 참조하도록 템플릿을 확장하면 모든 필드에 대해 if 문을 작성해야합니다. 없음을 포함 할 수있는 참조. –

+0

링크가 비어 있기 때문에 사용자가 볼 수없는 링크를 믿는 것은 매우 나쁜 습관입니다. 그들은 여전히 ​​거기에 있으며, 사용될 때의 상황이 많습니다. –

+0

동의. 필자는리스트에서 None을 필터링하기 위해 뷰를 변경했습니다. 그런 다음 사전 필터링되지 않은 템플릿에 default_if_none 필터를 사용했습니다. –

관련 문제