본문 바로가기
IT관련/Python

python의 django를 이용해서 웹을 만들어보자 - 7편 Admin(관리자)편! 외래키(Foreign Key)를 다뤄봅시다! (feat. fieldsets ! )

728x90

6편 : https://heokknkn.tistory.com/15

 

이번편에서는 Admin쪽을 좀 더 공부해보겠습니다 ! 

 

오늘은 그 중에서 외래키에 대해서 알아보겠습니다 ! 

 

먼저 !!! A라는 테이블에서 B의 정보를 좀 가져와보겠습니다 ! 

저는 Community쪽에서 새롭게 등록을 해보겠습니다 ! 

위에서 Add COMMUNITY를 누르면 아래와 같이 ! 

위에는 일단 간단하게 등록한건데요 ! 어떻게 저렇게 설정했는지 한번 확인해볼까요? 

models.py를 살펴보겠습니다 ! 

name = models.CharField("이름(name)", max_length=140)
people = models.IntegerField("인원(people)")
owner = models.ForeignKey(
    "users.User", related_name="communities", on_delete=models.CASCADE
)

위에처럼 CharField에서 처음에 Admin에서 보여질 이름도 지정 할 수 있습니다 !!!! 

또한 owner를 ForeignKey를 줍니다 ! 

 

 

외래키(Foreign Key)란??

외래키(Foreign Key)란 테이블의 필드 중에서 다른 테이블의 행과 식별을 할 수 있는 키를 의미합니다.

일반적으로 외래키가 포함된 테이블을 자식테이블 이라고 하고 ,  외래키 값을 갖고 있는 테이블은 부모테이블 이라고 합니다.

즉 !! 외래키란 테이블과 테이블을 연결하기 위해서 사용되는 키라고 생각하면 됩니다 !!!

 

따라서 ! 위에서는 Users테이블이 부모 테이블, Communities가 자식 테이블!

나중에 등록 할 때 DB에서 직접 확인해보도록 하겠습니다 ! 

외래키는 정말 많이 사용되니까 확실히 숙지하고 가시는게 좋습니다 !!! 

 

 

아 ! 혹시라도 models에서 기본 클래스안에서 변수명이라던가 정보가 바뀌면 

py manage.py makemigrations
py manage.py migrate

이 위에 2개를 잊지말아주시구요 ^^

그럼 Admin에서도 확인 할 수 있게 정의를 해줘야겠죠?? 

# 진짜 어드민 패널에 뿌려주는것 ! fieldsets
fieldsets = (
    (
        "Basic Info",
        {
            "fields": (
                "name",
                "people",
            )
        },
    ),
    ("Last Details", {"fields": ("owner",)}),
)

위에 처럼 해주세요 !!! 

fieldsets은 admin에서 페이지의 레이아웃을 제어하도록 설정 해줍니다 !!! 자유롭게 커스텀도 가능하죠 ㅎㅎ

자 그러면 화면을 확인해봐야겠죠? 

성공 !!!! 

자 ! 먼저 외래키의 기능때문에 DB에 들어가는 값부터 보려고 간단하게 등록을 1개 하겠습니다 !!! 

Owner에서는 user에서 등록한 user목록이 그대로 나옵니다 !!

아래와 같이 가볍게 등록해줍니다 ! 

그리고 DB에서 확인해보면 !!! kkana의 id는 2입니다 !! 

그러면 community를 확인해봐야겠죠? 

 

그러면 community를 봐볼까요? 

owner_id란에 kkana의 id가 적혀있습니다 ! 

즉 ! 외래키(foreign key)를 이용해서 손쉽게 테이블과 테이블의 연결점을 만들 수 있습니다 ! 

 

 

자 오늘은 외래키에 대해서 알아봤습니다 !!

외래키는 정말 중요합니다 !!! 예를 들어 카톡에서 누군가와의 대화방을 만들었는데 그 대화방에 유저명을 알아내야겠죠?? 이럴 때 대화방에 유저의 대한 외래키가 있기 때문에 그 대화방에 맞는 유저를 가지고 올 수 있는겁니다 !!! 

대신 ! 잘 못 만지면 엄청난 대참사가 !! ( 경험상 특별히 db를 만지지 않는 이상은 알맞은 값만 들어갑니다 ) 

꼭 숙지해서 갑시다 ! 

 

위에는 등록하고나서의 모습입니다 ..... 너무 못생겼죠??? 

다음시간에는 admin을 좀 더 활용해서 등록한 것들에 대해서 좀 더 이쁘게 나올 수 있게 해보겠습니다 !!! 

왜냐하면 너무 못생겼어요 ㅜㅜ 좀 더 커스텀도 좀 하고 꾸며보겠습니다 ! 

728x90