Python/Django Framework
[Python Django] 3-3. CBV FromView ForeignKey 연결
Jake the Dog
2022. 3. 26. 09:39
반응형
게시판을 작성하면서 작성자 정보를 저장하지 않았었는데, 이 부분 수정하면서 다른 테이블과의 연결에대해 알아봅니다.
model.py 수정
- insert_user를 ForeignKey로 지정
- on_delete=models.CASCADE 설정은 외래 키로 지정된 데이터가 삭제되었을 때 대한 데이터 역시 삭제해준다는 설정이다
# board/models.py
from django.db import models
class Board(models.Model):
title = models.CharField(max_length=256, verbose_name="제목")
contents = models.TextField(verbose_name="내용")
insert_user = models.ForeignKey('user.User', verbose_name="작성자", on_delete=models.CASCADE) # 추가
insert_date = models.DateTimeField(auto_now_add=True, verbose_name="작성일")
update_date = models.DateTimeField(auto_now=True, verbose_name="수정일", null=True)
def __str__(self):
return self.title
class Meta:
db_table = 't_board'
verbose_name = "게시판"
verbose_name_plural = "게시판 목록"
마이그레이션 진행
$ python3 manage.py makemigrations
$ python3 manage.py migrate
views.py 수정
- 로그인 정보를 통해 작성자 저장되도록 수정
- 로그인이 안되어있을시 로그인 화면으로 이동
- 로그인되어있지만 user 정보가 없을 때 로그아웃 페이지로 이동
- 로그인된 session의 정보는 form_valid 함수를 오버라이드할때 form 내부에서 접근한다
# board/views.py
from django.shortcuts import redirect
from django.views.generic import FormView, DetailView, ListView
from board.forms import BoardCreateForm
from board.models import Board
from user.models import User
class BoardCreateView(FormView):
template_name = "board_create.html"
form_class = BoardCreateForm
success_url = "/board/create/"
def form_valid(self, form):
# user 정보 취득
user_id = self.request.session.get('user_id')
if user_id:
try:
user = User.objects.get(pk=user_id)
except User.DoesNotExist:
return redirect("/user/login/")
else:
return redirect("/user/logout/")
board = Board(
title=form.data.get('title'),
contents=form.data.get('contents'),
insert_user=user
)
board.save()
return super().form_valid(form)
class BoardDetailView(DetailView):
template_name = "board_detail.html"
model = Board # URLConf에서 pk 파라미터의 값을 활용하여 자동으로DB를 조회한다
context_object_name = "board"
반응형