Django ModelForm : save (commit = False)는 무엇에 사용됩니까?
하위 클래스 save(commit=False)에서 양식 객체를 만들고 양식과 모델을 모두 확인하기 위해 ModelForm실행 하는 대신 왜 사용 is_valid()합니까?
즉, 무엇 save(commit=False)입니까?
괜찮다면 이것이 유용 할 수있는 가상의 상황을 제공 할 수 있습니까?
양식에서 대부분의 모델 데이터를 가져 오지만 일부 null=False필드를 비 양식 데이터 로 채워야 할 때 유용 합니다.
commit = False로 저장하면 모델 객체가 생성되고 추가 데이터를 추가하고 저장할 수 있습니다.
여기에 답변이 있습니다 ( docs ) :
# Create a form instance with POST data.
>>> f = AuthorForm(request.POST)
# Create, but don't save the new author instance.
>>> new_author = f.save(commit=False)
가장 일반적인 상황은 데이터베이스가 아닌 '메모리'에서만 양식에서 인스턴스를 가져 오는 것입니다. 저장하기 전에 몇 가지 사항을 변경해야합니다.
# Modify the author in some way.
>>> new_author.some_field = 'some_value'
# Save the new instance.
>>> new_author.save()
Django 문서에서 :
이 save () 메서드는 True 또는 False를 허용하는 선택적 commit 키워드 인수를 허용합니다. commit = False로 save ()를 호출하면 아직 데이터베이스에 저장되지 않은 객체를 반환합니다.
이 경우 결과 모델 인스턴스에서 save ()를 호출하는 것은 사용자의 몫입니다. 이것은 저장하기 전에 객체에 대한 사용자 정의 처리를 수행하거나 특수 모델 저장 옵션 중 하나를 사용하려는 경우 유용합니다. commit은 기본적으로 True입니다.
save (commit = False)가 모델 인스턴스를 생성하여 반환하는 것 같습니다. 실제로 저장하기 전에 일부 포스트 프로세싱에 깔끔합니다!
"실제 예"로 이메일 주소와 사용자 이름이 항상 동일한 사용자 모델을 고려하면 다음과 같이 ModelForm의 저장 방법을 덮어 쓸 수 있습니다.
class UserForm(forms.ModelForm):
...
def save(self):
# Sets username to email before saving
user = super(UserForm, self).save(commit=False)
user.username = user.email
user.save()
return user
commit=False사용자 이름을 이메일 주소로 설정하는 데 사용하지 않았다면 사용자 모델의 저장 방법을 수정하거나 사용자 개체를 두 번 저장해야합니다 (비용이 많이 드는 데이터베이스 작업을 복제 함).
참고 URL : https://stackoverflow.com/questions/12848605/django-modelform-what-is-savecommit-false-used-for
'Nice programing' 카테고리의 다른 글
| Python에서 3D 산점도를 만드는 방법은 무엇입니까? (0) | 2020.11.04 |
|---|---|
| 모든 사용자에게 내 응용 프로그램에서 만든 파일에 대한 전체 권한을 부여하는 방법은 무엇입니까? (0) | 2020.11.04 |
| npm을 사용하여 "devDependencies"만 설치하는 방법 (0) | 2020.11.04 |
| 이름이 [DEFAULT] 인 FirebaseApp이 존재하지 않습니다. (0) | 2020.11.04 |
| CString과 :: std :: string :: std :: wstring을 서로 변환하는 방법은 무엇입니까? (0) | 2020.11.04 |