Django Reverse_name

2023. 4. 28. 14:38·Python/Django
반응형

reverse_name FK로 삼은 객체에서 접근하는 방법이다.

기존 접근 방법은 아래와 같다.

post = Post.objects.filter(id=4)

Comment.objects.filter(post_id=4)
Comment.objects.filter(post__id=4)
Comment.objects.filter(post=post)

위와 같은 코드로 post_id가 4인 comment를 찾을 수 있다.

하지만 아래와 같은 코드로도 동일한 동작을 한다.

post.comment_set.all()

바로 fk로 사용하고 있는 post에서 comment를 접근하는 방법이다.

사실 사용자 관점이나, 객체지향적으로 봤을때 이게 자연스럽긴하다.

왜냐하면 댓글은 보통 게시글을 클릭했을 때, 그 게시글에 작성된 댓글을 리스트로 보여주기 때문이다.

댓글에서 게시글의 id를 찾은 다음, 그 게시글에 해당하는 댓글을 보여준다고 생각하기보다는 위의 사고방식이 조금 자연스럽다고 생각된다

reverse_name이 충돌이 발생한다면?

reverse_name 디폴트 이름은 앱이름은 고려하지 않고 모델의 이름만 고려를 함

blog의 Post Model 이 FK로 USER를 가지고 있고, 똑같이 instagram의 Post Model이 FK로 USER를 가지고있다면

마이그레이션 할 때 에러가 뜨게 된다.

이유는 user.post_set.all()을 하는 순간 두 모델의 이름이 같기 때문에, post_set에 할당되는게 두개가 되기 때문이다.

그래서 FK에서 지정해주는 reverse_name을 변경할 필요가 있다.

변경하는 방법은 아래와 같다.

author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="instagram_comment_set")

admin from에서 choice로 fk를 선택하는 곳이 있다.

이곳에서 보면, 공개된 포스트와, 비공개된 포스트에 모두 댓글을 작성할 수 있도록 되어있다.

하지만, 비공개된 포스트에 댓글을 달게 하고싶지 않다.

그런 경우에 아래와 같이 설정한다.

class Post(models.Model):
	is_public = models.BooleanField(default=True, verbose_name="공개여부")
class Comment(models.Model)
	post = models.ForeignKey(Post,limit_choices_to={"is_public": True})

위와 같이 설정하게 되면 이제 선택창에 is_public이 false로 지정되어있는 게시글은 보이지 않게 된다.


Uploaded by N2T

반응형

'Python > Django' 카테고리의 다른 글

Django 공식문서 튜토리얼 공부  (1) 2023.05.02
OneToOneField  (0) 2023.04.28
ORM을 통해 데이터 받아오기  (1) 2023.04.26
Static & Media  (1) 2023.04.26
PIP로 설치된 패키지 찾는법  (1) 2023.04.24
'Python/Django' 카테고리의 다른 글
  • Django 공식문서 튜토리얼 공부
  • OneToOneField
  • ORM을 통해 데이터 받아오기
  • Static & Media
cvcvcx9
cvcvcx9
프로그래머
  • cvcvcx9
    참치와 연어가 좋아
    cvcvcx9
  • 전체
    오늘
    어제
    • 전체보기 (90)
      • JAVA (22)
        • 웹 프로그래밍 딥하게 파보기 (7)
        • String (2)
        • 자바의 다양한 객체 (3)
        • 클래스와 인터페이스, 추상클래스 (2)
        • 컬렉션과 자료구조 (6)
        • 제네릭 (0)
      • SPRING (3)
      • JPA 게시판 (19)
        • JPA게시판 만들기 (7)
        • JPA (10)
        • Spring Security (2)
        • 오류정리 (0)
      • 코딩테스트 준비 (4)
        • 자료구조 (3)
      • Python (21)
        • Django (21)
      • 컴퓨터 기초 (8)
        • 컴퓨팅사고 (7)
      • Web (7)
        • 유용한 설정 (6)
        • Git 관련 (1)
      • 데이터베이스 (1)
        • 친절한 SQL튜닝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 인기 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
cvcvcx9
Django Reverse_name
상단으로

티스토리툴바