1. model을 통해서 컬럼추가하기
from django.contrib import admin
from .models import Room, Amenity
@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
list_display = (
"name",
"price",
"kind",
"total_amenities", #QuerySet사용, model에서 메소드로 작성하면됨
"owner",
"created_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",
)
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")
category = models.ForeignKey(
"categories.Category",
null=True,
blank=True,
on_delete=models.SET_NULL,
)
def __str__(self):
return self.name
def total_amenities(self):
return self.amenities.count() #total_amenities 작성
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 메뉴 라벨을 변경함
2. admin에 직접넣기
@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
list_display = (
"name",
"price",
"kind",
"total_amenities",
"owner",
"created_at",
)
list_filter = (
"country",
"price",
"pet_friendly",
"kind",
"amenities",
)
def total_amenities(self, room): # 두번째에 room을 넣는 것은 관리자 패널임
return room.amenities.count()
개인적으로는 model에 하는 것이 좋은 것 같음