from django.db import models
from common.models import CommonModel
class Room(CommonModel):
"""Room Model Definition"""
class RoomKindChoices(models.TextChoices):
ENTIRE_PLACE = ("entire_place", "Entire Place")
PRIVATE_ROOM = ("private_room", "Private Room")
SHARED_ROOM = "shared_room", "Shared Room"
name = models.CharField(
max_length=180,
default="",
)
country = models.CharField(
max_length=50,
default="한국",
)
city = models.CharField(
max_length=80,
default="서울",
)
price = models.PositiveIntegerField()
rooms = models.PositiveIntegerField()
toilets = models.PositiveIntegerField()
description = models.TextField()
address = models.CharField(max_length=250)
pet_friendly = models.BooleanField(default=True)
kind = models.CharField(
max_length=20,
choices=RoomKindChoices.choices,
)
owner = models.ForeignKey(
"users.User",
on_delete=models.CASCADE,
)
amenities = models.ManyToManyField("rooms.Amenity")
def __str__(self):
return self.name
class Amenity(CommonModel):
"""Amenity Definition"""
name = models.CharField(
max_length=150,
)
description = models.CharField(
max_length=150,
null=True,
blank=True,
)
def __str__(self) -> str: # 화살표는 단순히 타입 표시하는 것일 뿐임
return self.name
class Meta:
verbose_name_plural = "Amenities" # admin 메뉴 라벨을 변경함
from django.contrib import admin
from .models import Room, Amenity
@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
list_display = (
"name",
"price",
"kind",
"owner",
"created_at",
"updated_at",
)
list_filter = (
"country",
"price",
"pet_friendly",
"kind",
"amenities",
)
@admin.register(Amenity)
class AmenityAdmin(admin.ModelAdmin):
list_display = (
"name",
"description",
"created_at",
"updated_at",
)
readonly_fields = (
# 읽기 전용 옵션, created_at과 같이 자동으로 데이터가 입력되는 것은 사용자가 수정할 수 없음
# 또한 클릭하여 들어가면 화면에서 안나옴 readonly field를 넣어주면 나옴
"created_at",
"updated_at",
)
# Register your models here.