본문 바로가기

Python/Django

[Django] Forms - ModelForms 커스터마이징

이번 시간에는 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