Django – 유효성 검사에 대한 글

수많은 정보를 저장하고 꺼내오고 해야 하는 시대에 Django 로 서비를 만들고 하다보면, 각각 필드의 유효성 검사에 대한 고민이 엄청 많다.

폼에서 하나 자바스크립트로 하나 model 에서 하나…등등등 아래 글에서 인사이트를 얻어보자 잘 정리해 두셨네. 강의를 들으면서 정리하신 내용 같은데 많은 도움이 되었어요 😊

[
Django Form Validation
출처 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%A5%EA%B3%A0-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard 장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생..
![](https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyWt1Y%2Fbtrq5pnLgX1%2FrSOA42FOPMPX2H7y4KKZsk%2Fimg.jpg)
](https://devdongbaek.tistory.com/88)

내가 만든 예제코드

from django.core.validators import MinLengthValidatordef validate_isdecimal(value):    if not value.isdecimal():        raise ValidationError(            _("%(value)s is not an deciamal number"),            params={"value": value},        )class Company(models.Model):    name = models.CharField(max_length=255)    vatid = models.CharField(max_length=255, unique=True, validators=[validate_isdecimal, MinLengthValidator(10)])  # 숫자가 아니거나, 10자리 이하는 에러 반환

결론

아니… 그러면 언제 Validators를 써야하고, 언제 clean을 써야해???

가급적이면 모든 validators는 model에 정의하고, ModelForm을 통해서 model validators 정보도 같이 가져와야 한다.
**validators는 웬만하면 model에 정의하자!!**

😊
clean() 을 오버라이드해서, validator에 위배되는 행동을 만약 clean() 함수 내에서 허용하면, 암만 모델에 정해둬도 유효성을 무시하고 데이터가 처리됨을 명심하시길!! form.is_valid() 이전에 호출 되기 때문 같네.

clean이 필요할 때는,

  • 특정 Form에서 1회성 유효성 검사 루틴이 필요할 때
  • 다수 필드값에 걸쳐서, 유효성 검사가 필요할 때
  • 필드 값을 변경할 필요가 있을 때 #validators는 값만 체크하고, 변경할 수는 없다.

빌트인 유효성 검사를 사용해

공식 사이트에서 제공하는 이미 준비된 Validators 들이 있다. 보고 활용을 하자.

[
Validators | Django documentation | Django
![](https://static.djangoproject.com/img/fundraising-heart.cd6bb84ffd33.svg)
](https://docs.djangoproject.com/en/4.0/ref/validators/#built-in-validators)

예제

from django.core.validators import MinLengthValidatorclass GameUserSignupForm(forms.ModelForm):    class Meta:        model = GameUser        fields = ['server','username']    def clean_username(self): # 필드명에 clean_을 붙여서 각 필드별로 유효성 처리및 데이터 변경을 수행함        return self.cleaned_data.get('username', '').strip()

JQuery – on(‘change’) vs change() 어떤 것을 쓰나?

이벤트 함수를 등록해서 쓰고 싶은데, 2가지 방식이 있네

on(‘change’) vs change()

둘다 맞는데, 머 정답이라기 보다는 그냥 on(이벤트, function() {}); 형태로 사용하는 것을 강권합니다.

동적으로 생긴 컴포넌트도 쓸수있도록 하려면 on(‘change’,… 를 쓰라고 하네요.

https://lookingfor.tistory.com/entry/JQuery-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-onclick-%EA%B3%BC-click-%EC%9D%98-%EC%B0%A8%EC%9D%B4

Subtitle for this block
## Frequently Asked Questions
Description for this block. Use this space for describing your block. Any text will do.
#### JQuery – on(‘change’) vs change() 어떤 것을 쓰나?
동적으로 생긴 컴포넌트도 쓸수있도록 하려면 on(‘change’,… 를 쓰라고 하네요.
#### Title for This Block
Description for this block. Use this space for describing your block. Any text will do. Description for this block. You can use this space for describing your block.
#### Title for This Block
Description for this block. Use this space for describing your block. Any text will do. Description for this block. You can use this space for describing your block.

Django ORM – order_by 리스트로

쿼리셋에서 order_by() 를 필드 하나만 하는 경우는 머 고려할 것도 없이 그냥 필드명을 적어주면 된다.

2개 이상은

queryset.order_by("필드1", "필드2")

이렇게 주면 된다.

파이썬 코딩에서 필드명을 리스트를 만들고 그 리스트를 바로 넣어주면 편하다고 생각했는데, 그대로 되네

    order_field = "name"    order_field = s_sort_order + order_field    order_field_array = []    order_field_array.append("company")    order_field_array.append(order_field)    search_itemlist = product_list.order_by(*order_field_array)

*필드배열 을 넣어주는 것이 핵심!