04.-3 Rooms 앱

조재훈·2022년 7월 17일
0

Clone_Airbnb

목록 보기
11/31
post-thumbnail

1) 클래스 추가

Amenity와 Facility, HouserRule에 대한 클래스를 추가한다.

class Amenity(AbstractItem):
   """Amenity Model Definition"""
   pass

class Facility(AbstractItem):
   """Facility Model Definition"""
   pass

class HouseRule(AbstractItem):
   """HouseRule Model Definition"""
   pass

Room 클래스에 있던 room_type의 경우, 어떤 숙소는 한 가지 유형의 방에만 해당하도록 지정하려 한다. 그러므로 ManyToManyField가 아닌 ForeignKey로 변경한다.

그리고 Room 클래스에 변수들도 추가해준다.

amenities = models.ManyToManyField(Amenity)
facilities = models.ManyToManyField(Facility)
house_rules = models.ManyToManyField(HouseRule)

migration을 하자.

2) admin 패널 수정

admin 패널을 보면 추가되긴 했는데 내용이 없다.

admin 패널을 다시 건드려주자.

@admin.register(models.RoomType, models.Amenity, models.Facility, models.HouseRule)
class ItemAdmin(admin.ModelAdmin):
   """Item Admin"""
   pass

근데 admin 패널에 등록된 클래스들을 보면 복수형으로 된 이름들이 좀 이상하다.

해당 클래스의 복수형 이름을 Meta 클래스를 활용하여 지정할 수 있다.
https://docs.djangoproject.com/en/4.0/ref/models/options/

  • verbose_name : 단수형 이름
  • verbose_name_plural : 복수형 이름

class Meta:
    verbose_name_plural = "Amenities"

짠. 이쁘게 바뀌었다.

3) ordering

Room Types를 보면 내용들이 정렬이 되어있다.

이 순서를 변경하고 싶을 경우 역시 Meta 클래스를 활용하여 지정해줄 수 있다.

class Meta:
   ordering = ["created"]

앞선 것과 순서가 바뀌었다.

4) 기타

현재 amenities, facilities, house_rules가 의무적으로 채워넣어야 하는 칸이어서 저장이 잘 안된다.

여기에 blank=True를 입력해주자.

amenities = models.ManyToManyField(Amenity, blank=True)
facilities = models.ManyToManyField(Facility, blank=True)
house_rules = models.ManyToManyField(HouseRule, blank=True)



5) 사진 추가

Room의 사진을 추가하려한다. 여기에 적용할 클래스를 생성.

여기서 Room에 빨간불이 들어온 이유는 파이썬이 코드를 수직방향으로 읽는데 Room 클래스가 이보다 나중에 나오기 때문.
해결 방법이 두 가지가 있는데 하나는 Photo 클래스를 Room 클래스 밑으로 옮기는 것.
다른 하나는 Room을 쌍따옴표로 감싸는 것. 이렇게 써놓으면 장고가 알아서 그에 해당하는 클래스들을 찾는다.

다른 것들도 그렇게 해주자.

host = models.ForeignKey("users.User", on_delete=models.CASCADE)
room_type = models.ForeignKey("RoomType", on_delete=models.SET_NULL, null=True)
amenities = models.ManyToManyField("Amenity", blank=True)
facilities = models.ManyToManyField("Facility", blank=True)
house_rules = models.ManyToManyField("HouseRule", blank=True)

그리고 admin 패널에도 등록

migration을 하자

Photos가 생겼다

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

0개의 댓글