www.youtube.com/watch?v=gXGQmt_U9Ao&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=16
이 포스팅은 다음과 같은 youtube 영상을 따라하면서 배운 내용과 학습 내용을 담은 것이다:
- Dennis Ivy - User Profile With One to One Relationship | Django Framework (3.0) Crash Course Tutorials (pt 14)
현재 Django Version 3.1.2 를 쓰고 있다. Django는 파이썬을 쓰는 오픈소스 웹 프레임워크이다. 웹사이트 만들때 주로 쓰며, 간단한 것이 큰 특징이다.
※ OneToOne Relationship으로 Customer과 User를 연결시키기
현재 지금까지 우리가 한 것은 User가 회원가입을 하고, 그 후에 User가 주문을 하는것이다. 하지만 User가 주문을 하려면 Customer이라는 class 안에 포함이 되어 있어야 하는데 포함되어 있지 않으므로 주문을 할 수가 없다. 따라서 이러한 One-to-One Relationship을 구현을 해주어야 가능할 것이다.
우선, models.py에 Customer class를 다음과 같이 바꿔준다:
# models.py
from django.db import models
from django.contrib.auth.models import User
...
class Customer(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True)
phone = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
def __str__(self):
return self.name
...
User를 django.contrib.auth.models에서 import 해주고, Customer class에 user라는 field를 추가해준다. User라는 객체를 불러와주고, null=True는 필드 값이 공백으로 저장되는 것도 허용하겠다는 뜻이다. on_delete=models.CASCADE는 저번에 설명한적이 있지만 이 Customer이라는 class가 삭제될때 함께 삭제되게끔 설정해주는 것이다.
이제 이렇게 설정해주었으므로 Customer class에는 user라는 field가 생겼다.
다음은 아까 초반에 말했던 것처럼 User가 처음 회원가입할때 Customer이라는 class에 저장을 시켜줘야 주문이 가능할 것이다. views.py를 다음과 같이 추가해준다:
# views.py
...
@unauthenticated_user
def registerPage(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
user = form.save()
Customer.objects.create(user=user, name=user.username, email=user.email)
group = Group.objects.get(name='customer')
user.groups.add(group)
return redirect('login')
context = {'form':form}
return render(request, 'accounts/register.html', context)
...
Customer.objects.create(user=user, name=user.username, email=user.email)을 통해, 회원가입을 하면서 user의 정보를 Customer이라는 class에 동시에 저장하게끔 명령한다.
이제 실제로 회원가입을 해서 localhost:8000/admin 페이지에 있는 Customer에 들어가서 보게 된다면 그 User의 정보가 그대로 저장되어 있는 것을 볼 수 있다.