새로운 앱인 profile
을 만들고 account 객체와 profile간의 관계를 정의해볼게요.
그리고 새로운 profile 앱의 model에는 어떤 클래스 변수들이 정의되어야 할지 생각해볼게요.
manage.py 파일이 있는 경로에서 아래 명령어를 실행하여 앱을 만들도록 할게요.
python manage.py startapp profile
or
./manage.py startapp profile
or
py manage.py startapp profile # 윈도우에 해당
settings.py에 추가
settings.py에서 INSTALLED_APPS 리스트 변수에 새로 만든 앱 이름을 추가해주세요.
profile앱의 model field를 정의할게요.
매커니즘은 단순해요.
예. kimminsik123 이라는 계정을 만들었습니다. 그럼 이에 대응하는 프로필이 생성되어야하는데.
1:1로 만들어져요. 그것이 user 필드입니다.
다음으로 image필드는 파라미터로 upload_to가 있는데요. 이건 나중에 우리가 이미지 파일을 업로드하면 해당 파일이 저장되는 경로의 디렉토리에요.
related_name은 User객체를 참조한 값을 불러올때 그 name을 만하는데요. 기본값으로
해당 클래스의소문자이름_set
이렇게되요. 그렇다면 여기서는 profile_set
이 기본값인데 이렇게 하지 않고 별도의 이름을 지정해서 profile
이라고 했습니다.
from django.contrib.auth.models import User
from django.db import models
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
image = models.ImageField(upload_to='profile/', null=True)
nickname = models.CharField(max_length=20, unique=True, null=True)
message = models.CharField(max_length=100, null=True)
profileapp/forms.py 파일안에 아래와 같은 소스코드를 작성해 볼게요.
이전 우리가 form을 사용한 적이 있어요.
1) django에서 이미 만든 UserCreationForm을 사용했어요.
from django.contrib.auth.forms import UserCreationForm
여기서 가져왔어요.
2) AccountUpdateForm클래스에서 기존 UserCreationForm을 상속받아서 forms.py안에 정의한후 view의 form_class 변수의 값으로 할당했어요.
1)번의 경우는 회원가입 FORM을 만들어 준것이고 2)번은 회원가입 정보 수정과 같은 기능은 회원가입 기능과 동일하기에 상속받았습니다.
공통점
그럼 결론적으로 이 골격 forms.ModelForm을 상속받아서 UserCreationForm
과 비슷한 방식으로 Form을 정의할 수 있어요.
아래 소스코드가 그 결과물이에요.
from django import forms
from profileapp.models import Profile
class ProfileCreationForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['image', 'nickname', 'message']