하나의 회원은 여러개 게시물 가능
하나의 게시물은 여러 회원의 이해 좋아요 받을 수 있다.
그러므로 회원-게시물은 다대다 관계
누가 누구를 눌렀는지를 하면 됨
하나의 사용자는 댓글 여러개 가능
하나의 게시물은 여러개 댓글 달아지는거 가능
post model
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=40)
contents = models.TextField()
create_date = models.DateTimeField(auto_now_add=True)
# writer은 다른 모델을 참조하겠다.(User) 외래키 추가
writer = models.ForeignKey(User, on_delete=models.CASCADE) # on_delete : User가 delete 될 때 게시글을 어떻게 설정한 것인지에 대해 설정 1. 게시글 같이 지우기(CASCADE) 2. 없는 값으로 해서 게시글은 남겨두기
# 다대다 관계는 ManyToManyField, 아무도 누르지 않을 수 있으니 blank가 True, 참조할 때 이름을 지어줌(위에서랑 겹치지않게)
like = models.ManyToManyField(User, related_name='likes' ,blank=True)
def __str__(self):
return 'id : {}, title : {}'.format(self.id, self.title, self.contents)
이후 makemigrations → migrate
urls.py
path('like/<int:bid>',board.views.like),
main.html
function sendRequest(bid) {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == XMLHttpRequest.DONE && httpRequest.status == 200 ) {
document.getElementById("text").innerHTML = httpRequest.responseText;
}
};
// GET 방식으로 요청을 보내면서 데이터를 동시에 전달함.
httpRequest.open("GET", "/like/"+bid, true);
httpRequest.send();
}
추가함 (코드블록 안에 안에)
하트 부분 클릭시 해당 함수가 실행되게 하도록 설정, 태그 안에 내용을 바꾸게 하기 위해 this 추가
<p class="post-meta" onclick="sendRequest({{ post.id }}, this)">
{% if request.user in post.like.all %}
♥ {{ post.like.count }}
{% else %}
♡ {{ post.like.count }}
{% endif %}
</p>
views.py
@login_required(login_url='/accounts/login')
def like(request,bid):
# 어떤 게시물에, 어떤 사람이 like를 했는 지
post = Post.objects.get(id=bid) # 게시물 번호 몇번인지 정보 가져옴
user = request.user
if post.like.filter(id=request.user.id).exists(): # 유저면 알아서 유저의 id로 검색해줌
post.like.remove(user)
return JsonResponse({'message': 'deleted', 'like_cnt' : post.like.count() })
else:
post.like.add(user) # post의 like에 현재유저의 정보를 넘김
return JsonResponse({'message': 'added', 'like_cnt' : post.like.count()})
위지위그 - 내 글 꾸밀수있게하는거
했는데 태그가 그대로 출력되는 경우 post.contents | safe 로 바꾸어준다