티스토리 뷰
상황 : 인스타그램 project를 하는 도중, ajax를 사용하여 follow 기능을 구현하는 데 버튼을 2개 만들어 놓고 id 별로 따로 view 처리(follow,unfollow)를 하니 jquery를 처리하는 과정에서 딜레이나 어디선가 꼬여 서버 에러가 계속 났다. 이 문제로 2틀을 날렸다..
구글링을 통해 get_or_create 메소드로 해결 가능하다는 것을 알게 되었다.
get_or_create
이 메소드는 구하고자 하는 객체가 존재할 경우 객체를 얻고 객체가 존재하지 않으면 생성한다.
반환은 (object,created)로 튜플 형식으로 반환한다.
object는 우리가 얻고자 한 모델의 인스턴스이고
created는 boolean flag이다.
인스턴스가 get_or_create에 의해 생성이 되었으면 True를 반환하고,
인스턴스를 기존 데이터베이스에서 꺼내왔으면 False를 반환한다.
해결 : 하나의 버튼으로 view 로직을 짜 조건에 맞는 follow 객체가 있었는지 created를 통해 알아내어 True 라면 새로 생성된 거니 팔로잉 요청으로 처리하고 False라면 이미 팔로잉한 상태에서 버튼을 눌른 것이기 때문에 언팔로잉 처리를 해준다.
@login_required()
def post_like(request,pk):
post = Post.objects.get(pk=pk)
like,flag = Like.objects.get_or_create(post=post,user=request.user) # 기존에 객체가 없으면 객체 생성 후 반환,있으면 객체 반환
if not flag: # 언팔로잉 요청일 경우
like.delete() # 팔로우 객체 삭제
message = 'liked'
else:
message = 'like'
like_count = Like.objects.filter(post=post).count()
data = {
'message':message,
'like_count':like_count
}
return JsonResponse(data)
'Framework > Django' 카테고리의 다른 글
pythonanywhere로 django 프로젝트 배포하기 (2) | 2018.06.05 |
---|---|
Django template url tag in javascript (0) | 2018.03.18 |
Specifying a namespace in include() without providing an app_name is not supported. 오류 해결 (4) | 2018.02.28 |
Window 환경 Django+Mysql 연동하기! (Mysqlclient) (7) | 2018.02.25 |
django forms widget(PasswordInput) (0) | 2018.02.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- java parseInt
- selenium switch_to_window python
- 후위 표기법
- 2진수 음수
- jsp tomcat
- 음수 10진수 음수 2진수
- virtualenv
- 중위 표기법 후위 표기법
- 2의 보수법
- sass
- java int to String
- 후위 표기 계산
- sass 설치
- selenium switch_to_window
- 후위 표현식
- jsp oracle 연동
- selenium 새 창 크롤링
- 후위 표기식
- java toString
- 후위 표기법 계싼
- 계산기 구현
- 중위 표현식 후위 표현식
- sass 사용법
- jsp tomcat 연동
- selenium 새 탭 크롤링
- python virtualenv
- jsp 서버 연동
- java String to int
- 후위 표기 수식 계싼
- 전자계산기 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함