08.-3 Room Admin 수정

조재훈·2022년 7월 21일
0

Clone_Airbnb

목록 보기
17/31
post-thumbnail

1) raw id

현재는 user가 2명밖에 없지만 만약 수천명이 된다면 이렇게 해서 확인하기가 어려워진다.

때문에 이런 ForeignKey나 ManyToMany로 연결된 필드들을 pk로 관리할 수 있도록 하자.
raw_id_fields

rooms - admin.py - RoomAdmin

    raw_id_fields = ("host",)


돋보기 클릭하면 user 검색하는 팝업도 뜸

2) Inline Models

admin 안에 또다른 admin을 넣기. 사진을 Photo에서만 보는게 아니라 User에 들어가서도 볼 수 있도록 한다. 여기서는 InlineModelAdmin 이란걸 쓰도록 한다.

rooms - admin.py

class PhotoInline(admin.TabularInline):
    
    model = models.Photo

class RoomAdmin(admin.ModelAdmin):
    
    '''
    
    inlines = (PhotoInline,)


TabularInline말고 StackedInline으로 해보자. 그냥 보여주는 방식의 차이인듯.

class PhotoInline(admin.StackedInline):
    
    model = models.Photo


둘 중 어느것을 쓸 것인지는 선호도 차이이고, 이제 우리는 Room 화면에서 사진들을 볼 수 있게 되었다! 이게 다 ForeignKey 덕분이다.

3) save() 메소드

주소를 seoul로 입력해도 Seoul로 저장되게 하려면 사용자가 입력한 내용을 가로채서 수정할 수 있어야 한다.
rooms - models.py - Room

    def save(self, *args, **kwargs):
    print(self.city)
    super().save(*args, **kwargs)

    def save(self, *args, **kwargs):
    self.city = "potato"
    super().save(*args, **kwargs)

이렇게 할 경우 CITY를 뭘로 적어도 potato가 자동으로 저장된다.

RoomAdmin에 save_model 메서드를 적용해보자

rooms - admin.py - RoomAdmin

    def save_model(self, request, obj, form, change):
        print("obj : ", obj, "\nchange : ", change, "\nform : ", form)
        super().save_model(request, obj, form, change)

Room 페이지 하나를 들어가서 수정을 하고서 저장하고 콘솔을 보면 form이 엄청나게 길게 출력된 것을 볼 수 있다.

obj는 Room 클라스, change는 변경 유무. 여튼 이거는 연습용이었으므로 삭제. models.py에 있는 save는 입력된 정보를 대문자로 바꿔주는 메소드로 작성한다.
rooms - models.py - Room

    def save(self, *args, **kwargs):
        self.city = str.capitalize(self.city)
        super().save(*args, **kwargs)

도시 이름 소문자로 저장

하지만 대문자로 저장됐지롱!

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글