Development Tip

Django의 forms.Form과 forms.ModelForm

yourdevel 2020. 11. 1. 18:45
반응형

Django의 forms.Form과 forms.ModelForm


그 누구도 날 유사점과 장고의 차이로 설명 할 수 forms.Formforms.ModelForm?


에서 만든 양식은 사용자 forms.Form가 수동으로 구성합니다. 모델과 직접 상호 작용하지 않는 양식에 사용하는 것이 좋습니다. 예를 들어, 데이터베이스와 상호 작용할 필요는없는 연락처 양식 또는 뉴스 레터 구독 양식이 있습니다.

생성 된 양식 forms.ModelForm이 자동으로 생성 된 다음 나중에 사용자가 수정할 수있는 위치입니다. 가장 좋은 예는 Django 웹 사이트에서 제공하는 훌륭한 문서에서 나온 것입니다.

forms.Form:
문서 : 양식 객체 다음
을 사용하여 만든 일반 양식의 예 forms.Form:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

forms.ModelForm:
문서 : 문서 에서 바로 모델
에서 양식 만들기 :

양식이 Django 모델을 직접 추가하거나 편집하는 데 사용되는 경우 ModelForm모델 설명이 중복되지 않도록 a 사용할 수 있습니다 .

다음으로 생성 된 모델 양식의 예 forms.Modelform:

from django.forms import ModelForm
from . import models

# Create the form class.
class ArticleForm(ModelForm):
    class Meta:
        model = models.Article

이 양식에는 Article생성 된 모델 과 동일한 필드 유형이 모두 자동으로 포함됩니다 .


유사점은 둘 다 위젯을 사용하여 양식 입력 세트를 생성하고 둘 다 브라우저에서 보낸 데이터의 유효성을 검사한다는 것입니다. 차이점은 ModelForm이 지정된 모델 클래스에서 필드 정의를 가져오고 기본 모델을 데이터베이스에 저장하는 방법도 있다는 것입니다.


내장 UserCreationForm myapp / forms.py를 확장하는 방법은 다음과 같습니다 .

from django import forms
from django.contrib.auth.forms import UserCreationForm


class RegisterForm(UserCreationForm):

    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.CharField(max_length=75)

    class Meta(UserCreationForm.Meta):
        fields = ('username','first_name','last_name', 'email')

참고 URL : https://stackoverflow.com/questions/2303268/djangos-forms-form-vs-forms-modelform

반응형