본문 바로가기
Coding/Python

Django Admin 페이지 수정 정리

by Hide­ 2018. 4. 20.
반응형

범위 : #1-24 Registering the Models in the admin ~ #1-25 Customizing the Django Admin


Django에는 어드민 패널이 따로 존재한다.

관리자가 쉽게 정보들을 수정, 추가, 삭제할 수 있게 하기 위함인데 이게 정말 유용하다.

먼저 이 페이지를 수정하기 위해서는 admin.py를 수정해야한다.

admin.py를 열고 최상단에 현재 앱의 모델을 추가해준다.


from . import models


그다음 모델들을 위한 클래스를 작성한다.


@admin.register(models.Image)
class ImageAdmin(admin.ModelAdmin):
pass

@admin.register(models.Like)
class LikeAdmin(admin.ModelAdmin):
pass

@admin.register(models.Comment)
class CommentAdmin(admin.ModelAdmin):
pass

models.py에 Image, Like, Comment 총 3개의 모델이 있으므로 해당 모델들을 위한

클래스를 작성하였다. (admin.ModelAdmin을 상속받아야함)

그리고 decorator를 사용하여 등록시켜준다.


저장하고 어드민 패널로 들어가보면 위처럼 우리가 작성한 3가지가 등록된 걸 알 수 있다.

여기서 Images로 들어가서 이미지를 하나 등록한 후 내용을 보면 아래와 같다.


이처럼 Image object라고만 나오기 때문에 상세한 정보를 한눈에 알아보기 힘들다.

이 부분은 models.py에 def __str__ 매직메소드를 정의함으로써 해결할 수 있다.

다음과 같이 모델쪽에서 __str__을 추가해준다.


class Image(TimeStampedModel):
file = models.ImageField()
location = models.CharField(max_length=140)
caption = models.TextField()
creator = models.ForeignKey(user_models.User, on_delete=models.CASCADE, null=True)

def __str__(self):
return '{} - {}'.format(self.location, self.caption)

위처럼 location과 caption을 return하도록 만들어줬다.

저장하고 다시 어드민 패널로 들어가보면,


알기 쉽게 우리가 수정한 내용이 출력되는것을 확인할 수 있다.

이제 Like모델의 경우도 추가해줘야 하는데 좋아요는 특별한 내용이 없다.

따라서 유저 네임을 출력해주도록 하자.

먼저 Like모델은 다음과 같이 생겼다.


class Like(TimeStampedModel):
creator = models.ForeignKey(user_models.User, on_delete=models.CASCADE, null=True)

image = models.ForeignKey(Image, on_delete=models.CASCADE, null=True)

여기서 creator가 FK로써 User모델을 가르키고 있다.

따라서 creator.username 을 통해 유저의 이름에 접근할 수 있다.

다음과 같이 내용을 추가해준다.


def __str__(self):
return 'User : {} / Image : {}'.format(self.creator.username, self.image.caption)


다시 admin.py의 내용으로 돌아와서, 이제 특정 내용을 클릭했을때, 예를 들어 Comment의 내용을 확인했을때


현재는 COMMENT하나의 값만 보여주고 있다.

이를 수정하려면 list_display값을 추가해주면 된다.


@admin.register(models.Comment)
class CommentAdmin(admin.ModelAdmin):
list_display = (
'message',
'creator',
'image',
'created_at',
'updated_at',
)

이렇게 list_display에 원하는 필드의 이름을 추가해주고 다시 들어가보면


위처럼 추가해준 모든 내용이 출력된다.


Image필드의 경우 file필드라서 클릭하면 바로 파일로 넘어간다.

만약 클릭을 했을 때 이미지를 수정하는 경우를 만들고 싶다면 list_display_links를 통해 링크를 지정할 수 있다.


list_display_links = (
'location',

)


또한 search_fields를 추가함으로써 검색도 할 수 있다.


search_fields = (
'location'
)

위처럼 작성하고 어드민 패널을 들어가보면


이렇게 상단에 검색할 수 있는 칸이 생겼다.

현재는 location만 입력했으므로 location기준으로 검색을 한다.

마찬가지로 list_filter라는것도 존재한다.


list_filter = (
'location',
'creator',
)

위와 같이 입력하고 어드민 패널을 들어가보면


오른쪽에 이렇게 필터가 생겼다.

'Coding > Python' 카테고리의 다른 글

Django Getting User Feed 정리  (0) 2018.04.22
Django Restframework 정리  (0) 2018.04.20
Django Model 정리  (0) 2018.04.19
Django Custom User Model 만드는 방법  (0) 2018.04.18
Django pipenv로 가상환경 구축  (0) 2018.04.18