django에서 폼과 관련된 필드 및 검증기
4888 단어 -----Django
from django import forms
def words_validator(comment):
if len(comment) < 4:
raise ValidationError('Not Enough words')
class CommentForm(forms.Form):
name = forms.CharField(max_length=50)
comment = forms.CharField(
validators = [words_validator]
)
def password_validator(comment):
if len(password) < 8:
raise ValidationError(' ')
if [0,1,2,3,4,5,6,7,8,9] in password:
raise ValidationError(' ')
양식 바인딩
if request.method == "POST":
data = request.POST
form = CommentForm(data)
if request.method == 'POST':
data = {'name':'geeklee','class':' '}
form = CommentForm(data)
if form.is_valid():
name = form.cleaned_data['name']
comment = form.cleaned_data['comment']
c = Comment(name=name,comment=comment)
c.save()
return redirect(to='detail')
# , cleaned_data
1. form 클래스의 운행 순서는 init, clean,validte,save입니다. 그 중에서 clean과validate는form에 있습니다.is_valid () 방법이 선후로 호출되었습니다.(여기에 의문이 하나 남는다. 구조가 완전히 같은 두 개의form이다. 그러나 하나는 선검증 후clean이고, 다른 하나는 선clean후검증이다. 원인은 불분명하다.)여기.https://docs.djangoproject.com/en/dev/ref/forms/validation/먼저 검증을 하고 클렌징을 해주셨어요.
2.cleaned_데이터의 값 유형은 필드에 정의된 Field 유형과 일치합니다.필드가charfield를 정의하면 clean 방법이 되돌아오는 cleaned데이터에서 대응하는 필드 값은 문자형으로 ModelChoiceField로 정의되면 cleaned데이터에서 필드 값은 모델입니다.ModelMultipleChoiceField로 정의하면 cleaned데이터에서 필드 값은 모델 실례list입니다.
3. clean 등의 단계에서 발생한 예외: Exception Value: argument of type'NoneType'is not iterable.이 가능하다, ~할 수 있다,...데이터 중의 어떤 필드 값은 목록이어야 하지만 실제로는 빈 값이다.
4. ModelForm의 메타 클래스에 정의된fields의 기본 Field는 Model에 정의된 Field입니다. 변경하려면 Form 클래스에서 같은 이름의 필드로 덮어쓸 수 있습니다. 예를 들어 사용자 정의widget과 Required 속성 등입니다.필드가form에서 어떻게 사용자 정의되든cleaned데이터에 대응하는 값은 모두 모델에 정의된 필드 형식에 따라 값을 가져와야 합니다. 그렇지 않으면 검사가 통과하지 않거나 타임즈 오류가 저장되지 않습니다.
이 몇 가지를 잠시 기억하면 form은 init,save 방법을 다시 쓸 수 있고 사용자 정의 방법을 사용할 수 있습니다.만약 이 몇 가지 물건에 대해 모르면 방법을 강구하여 예를 찾아 한 번 읽으면 이해할 수 있다.
※ ※ 클랜 방법 재작성 시 리턴클렌드data ※※※
보충:5.form의 네 가지 초기화 방식 ① 실례화 원form (initial={'onefield':value}) ② 필드를 정의할 때 초기화 값인 원formfield=forms.CharField (initial=value) ③ Form 클래스를 다시 쓰는 init () 방법:self.fields[‘onefield’].initial =value ④ form에 instanse (즉 oneform (instanse = onemodel instance) 를 전참할 때, 앞의 세 가지 초기화 방법은 모두 효력을 상실합니다. init를 다시 쓸 때에도 부류의 init를 사용하고 ③를 사용하면 여전히 효력이 없습니다. (시원하지 않습니다.)이 때 필드 값을 다시 초기화하려면 init () 에서만self를 사용해야 합니다.initial ['title'] =value,Form 클래스의 initial 속성 사전에 직접 값을 부여합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
render_to_response() HttPresponse 향상앞에 get 을 사용합니다template () 방법은 복잡한 코드로 템플릿과 경로를 처리하는 작업을 대체합니다.import에 이렇게 많은 물건이 있으니 그래도 비교적 번거롭다.파이톤은 효율적으로 개발된 언어이기 때문...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.