Question과 Answer 모델에 "글쓴이"에 해당되는 author 속성 추가
from django.contrib.auth.models import User
class Question(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
(mysite) c:\projects\mysite>python manage.py makemigrations
추가된 author 속성은 null을 허용하도록 설정하지 않아서 옵션 선택해야함.
1. author 속성을 null로 설정하는 방법
2. 이미 등록된 데이터의 author 값을 강제로 추가하는 방법
위와같음
Question과 Answer 모델에 author라는 속성이 추가되었으니까 질문등록과 답변등록하는 프로그램에도 author를 추가하도록 수정
answer_create함수, q_create 함수
answer.author = request.user # 추가한 속성 author 적용
question.author = request.user # 추가한 속성 author 적용
※ request.user는 로그인 전에는 AnonymousUser객체가 매핑되고 로그인한 후에는 User객체가 매핑된다.
로그아웃 상태에서 질문 또는 답변을 등록하면 다음과 같은 ValueError가 발생 - request.user가 User객체가 아니라 AnonymousUser객체이기 때문
from django.contrib.auth.decorators import login_required
@login_required(login_url = 'common:login')
def xxxx ....
answer_create 함수와 question_create 함수는 함수내에서 request.user를 사용하므로 로그인이 필요한 함수. @login_required 어노테이션을 사용
로그아웃 상태에서 위 어노테이션 적용된 함수가 호출되면 자동으로 로그인 화면으로 이동(로그인 URL을 지정해줌)
next파라미터의 의미 : 로그인이 성공한 후에 next에 해당되는 URL로 이동되어야 한다
<input type="hidden" name="next" value="{{ next }}"> <!-- 로그인 성공후 이동되는 URL -->
문제: "답변등록"에서 로그아웃 상태에서 글 작성하고 버튼 누르면 로그인 화면 이동 + 작성한 글 사라짐
해결: 아예 글 작성 못하게 막기
div class="form-group">
<textarea {% if not user.is_authenticated %}disabled{% endif %}
name="content" id="content" class="form-control" rows="10"></textarea>
</div>
상세조회 화면에도 글쓴이를 적용
목록조회 템플릿에 글쓴이를 표시하기
테이블 헤더에 <th>글쓴이</th>
컬럼을 추가
내용부분에도 글쓴이 적용
<div class="badge badge-light p-2 text-left">
<div class="mb-2">{{ answer.author.username }}</div>
<div>{{ answer.create_date }}</div>
</div>