(14:41) 수정됨.
목적
이용자들의 의견 수집 기능
모델
선택지의 경우 명칭이 중복될 수도 있으니 db 절약을 위해 m2m 관계를 사용한다.
기본적으로 게시글에 연결만 가능하도록 만들며, 투표 마감일까지만 투표가 가능하도록 만든다.
class 투표
max_choice = 5 # 최대 선택지 수
object: fk, 게시글
deadline: datetime.datetime # 투표 마감일
multiple choice: bool # 다중 선택 가능 여부
choices: m2m
class 선택지
title: str # 선택지 명
class 선택지 through
user: fk, user
선택지: fk, user
동작
Create
최대 선택지 수는 view 또는 model에서 관리한다.
class CreateView
max_choice = 5
if article.author != request.user => 403 perm
if (투표가 이미 존재) => err
Read
투표 마감, 투표 여부에 따라 다른 결과를 보여준다.
class ReadView
if today < deadline
if ( 투표함 ) => 투표 결과 페이지
else => return 선택 가능한 페이지
else => return 투표 결과 페이지
Update
투표 이후에 수정을 한다면 수집된 데이터가 의미가 없으므로 수정 기능을 제공하지 않는다.
Delete
갱신 기능과 마찬가지로 삭제 기능을 제공하지 않는다.