이번 시간에는 ModelForms 의 커스터마이징에 대해서 알아보겠습니다.
많은 옵션중에 Meta 서브 클래서에서 속성으로 전달할 수 있는 일반적인 옵션에 대해 알아보겠습니다.
forms.py 수정 - Meta 에서 fields, labels, error_messages 설정
class Meta:
model = Review
fields = '__all__' # ['first_name', 'last_name', 'stars']
# 라벨을 설정하지 않으면 필드명으로 기본 설정됨, models.py 의 설정에 근거함.
labels = {
'first_name':'YOUR FIRST NAME',
'last_name':'Last Name~~',
'stars':'Rating',
}
# 사용자 전용 에러메시지 만드는 방법, 키-값을 쌍으로 추가.
error_messages = {
'stars':{
'min_value':'Min value is 1',
'max_value':'Max value is 5',
},
}
models.py - validation 을 설정하여 입력값을 제한
from django.db import models
# validation 확인
from django.core.validators import MinValueValidator, MaxValueValidator
# Create your models here.
class Review(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
stars = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)])
views.py
if form.is_valid():
# {'first_name':'Jose', 'last_name' , 'email' ~~~~}
print(form.cleaned_data)
form.save() # 모델로 전달된 내용을 자동 저장
return redirect(reverse('cars:thank_you'))
else: # 오류 확인용 로그 추가
print('~~~is not valid')
print(form.cleaned_data)
모델을 변경하면 아래 명령어를 실행해야 한다.
(django) ~\Django\DJANGO4\DJANGO_COURSE_V2\10-Django-Forms\my_site>python manage.py makemigrations
Migrations for 'cars':
cars\migrations\0002_alter_review_stars.py
- Alter field stars on review
(django) ~\Django\DJANGO4\DJANGO_COURSE_V2\10-Django-Forms\my_site>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, cars, contenttypes, sessions
Running migrations:
Applying cars.0002_alter_review_stars... OK
(django) D:\workspace\Python\Django\DJANGO4\DJANGO_COURSE_V2\10-Django-Forms\my_site>
rental_review.html - 에러메시지 추가
{% for field in form %}
<div class="mb-3">
{{field.label_tag}}
</div>
{{field}}
{{field.errors}}
{% endfor %}
실행화면
옵션별 화면 변화는 아래와 같습니다.
forms.py 수정 - labels 제외
class Meta:
model = Review
fields = '__all__' # ['first_name', 'last_name', 'stars']
#labels = {
# 'first_name':'YOUR FIRST NAME',
# 'last_name':'Last Name~~',
# 'stars':'Rating',
#}
# 사용자 전용 에러메시지 만드는 방법, 키-값을 쌍으로 추가.
error_messages = {
'stars':{
'min_value':'Min value is 1',
'max_value':'Max value is 5',
},
}
실행 화면
forms.py 수정 - error_messages 제외
class Meta:
model = Review
fields = '__all__' # ['first_name', 'last_name', 'stars']
# 라벨을 설정하지 않으면 필드명으로 기본 설정됨, models.py 의 설정에 근거함.
labels = {
'first_name':'YOUR FIRST NAME',
'last_name':'Last Name~~',
'stars':'Rating',
}
# 사용자 전용 에러메시지 만드는 방법, 키-값을 쌍으로 추가.
#error_messages = {
# 'stars':{
# 'min_value':'Min value is 1',
# 'max_value':'Max value is 5',
# },
#}
실행 화면
에러 메시지를 커스터마이징 한 경우, 실행 화면
'Python > Django' 카테고리의 다른 글
[Django] Class based View - FormView (0) | 2022.12.16 |
---|---|
[Django] Class based View - TemplateView (0) | 2022.12.15 |
[Django] Forms - ModelForms (0) | 2022.12.15 |
[Django] Forms - 위젯과 스타일 (0) | 2022.12.15 |
[Django] Forms - 템플릿 렌더링 (0) | 2022.11.21 |