Template의 form에서 데이터를 분명히 전송 받은 것 같은데 view에서 요청이 제대로 안 들어 가는 것 같아서 form에 들어간 데이터의 문제인가 해서 “장고 is_valid() 역할”에 대해서 공부해 보았습니다.
장고 is_valid() 역할
- 필수 항목: 제출된 데이터에 필수 항목이 모두 포함되어 있는지 확인합니다.
- 데이터 유형: 제출된 데이터가 양식의 필드 정의에 정의된 예상 데이터 유형과 일치하는지 확인합니다.
- 필드별 유효성 검사: 최대 길이 또는 사용자 정의 유효성 검사기와 같이 개별 양식 필드에 대해 지정된 추가 유효성 검사 논리를 적용합니다.
- form 전체 유효성 검사: form의 ‘clean()’ 메서드에 정의된 양식 전체 유효성 검사 논리를 실행하여 여러 필드가 포함된 복잡한 유효성 검사를 허용합니다.
제출된 데이터가 모든 유효성 검사를 통과하면 '는 is_valid()'True를 반환하여 양식 데이터가 유효함을 나타냅니다.
그렇지 않으면 ‘False’를 반환하여 하나 이상의 유효성 검사 오류가 발생했음을 나타냅니다.
개발자는 일반적으로 ‘is_valid()‘ 메서드를 조건문과 함께 사용하여 데이터베이스에 유효한 데이터를 저장하거나 사용자가 수정할 수 있도록 오류 메시지와 함께 form을 렌더링하는 등 유효한 form 제출과 유효하지 않은 form 제출을 적절하게 처리합니다.
아래 코드를 통해서 유효하지 않은 form에 대한 오류 메시지를 출력할 수 있습니다.
if forms.is_valid():
board = forms.save()
else:
# Form data is invalid, handle errors
for field_name, error_messages in forms.errors.items():
# Iterate over each field and its associated error messages
print(f"Validation failed for field '{field_name}': {', '.join(error_messages)}")위의 코드로 유효하지 않은 form이 무엇인지 확인해보았습니다.

뭐지… 다 유효성 fail 발생했네…? 왜 그러지?
확인해보니 form 태그가 {{ form.as_p }} 보다 하위에 존재한 걸 눈치챘습니다.. -> form 요청이 넘어오지 않음
참 멍청한 실수인데… 찾는데 꽤나 걸렸네요…허허
<div class="detail">
{{ forms.as_p }}
<br><br>
<a href= {% url "boards:index" %}>
<button type="submit">메인으로</button>
</a>
<a href= {% url "boards:detail" pk %}>
<button type="submit">이전으로</button>
</a>
<form action={% url "boards:update" pk %} method="POST">
{% csrf_token %}
<button type="submit">수정완료</button>
</form>
</div>문제를 해결한 코드
<div class="detail">
<form action={% url "boards:update" pk %} method="POST">
{{ forms.as_p }}
<br><br>
<a href= {% url "boards:index" %}>
<button type="submit">메인으로</button>
</a>
<a href= {% url "boards:detail" pk %}>
<button type="submit">이전으로</button>
</a>
{% csrf_token %}
<button type="submit">수정완료</button>
</form>
</div>참고하면 좋은 글

공식 document : Form and field validation | Django documentation | Django (djangoproject.com)