Amenity와 Facility, HouserRule에 대한 클래스를 추가한다.
class Amenity(AbstractItem):
"""Amenity Model Definition"""
passclass Facility(AbstractItem):
"""Facility Model Definition"""
passclass 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을 하자.
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/
class Meta:
verbose_name_plural = "Amenities"
짠. 이쁘게 바뀌었다.
Room Types를 보면 내용들이 정렬이 되어있다.
이 순서를 변경하고 싶을 경우 역시 Meta 클래스를 활용하여 지정해줄 수 있다.
class Meta:
ordering = ["created"]
앞선 것과 순서가 바뀌었다.
현재 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)
짠
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가 생겼다