일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Git
- 알고리즘
- MAC
- java
- AWS
- Django
- 파이썬 알고리즘
- 장고
- Algorithm
- 알고리즘 풀이
- django rest framework
- js
- react
- Baekjoon
- 알고리즘 문제
- 파이썬
- DRF
- django ORM
- 백준
- PYTHON
- HTML
- c++
- web
- es6
- 알고리즘 연습
- form
- django widget
- CSS
- javascript
- API
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] admin 페이지 효율적으로 다루기 본문
django 에서 기본적으로 주어지는 admin 페이지는 개발자에게 있어서 많은 편리함을 제공해줍니다. 이를 커스텀하여서 더 효율적으로 사용해보도록 합시다.
admin 페이지에 models 등록
# {앱이름}/admin.py
from django.contrib import admin
form .models import Post
# 방법 1
admin.site.register(Post)
# 방법 2
class MyAdmin(admin.ModelAdmin):
...
admin.site.register(Post, MyAdmin)
# 방법 3
@admin.register(Post)
class MyAdmin(admin.ModelAdmin):
...
models
에는 Post
가 존재하고 이를 import 해와서 등록시키는 과정입니다. 총 3가지 방법이 있는데 각각에 대해서 간단히 알아보도록 합시다.
- 방법 1은 기본
ModelAdmin
을 통해서 admin 페이지에 등록을 합니다. - 방법 2는
Modeladmin
을 상속해 이를 커스튬하고 커스튬한 클래스를 통해 등록을 해줍니다.
- 방법 3은 방법 2 와 유사하지만 데코레이터를 통해서 더 간결하게 등록을 합니다.
admin 페이지에 기능추가하기
admin 페이지에 여러 기능을 추가 하는 커스튬이 가능합니다. 이 방법들에 대해서 몇 가지 살펴보겠습니다. 그리고 예시를 위해 Post
라는 model 을 정의하고 이를 통해 알아보도록 하겠습니다.
# core/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
is_published = models.BooleanField(default=False)
-
list_display
기본적으로 하나의 오브젝트에 대해 하나의 값만을 표시합니다. 여러 값을 표시하기 위해서
list_display
로 추가해줄 수 있습니다.# core/admin.py @admin.register(Post) class MyAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'short_content', 'is_published' ] def short_content(self, post): return post.content[:10]
content
를 전부 출력하는 건 너무 길 거 같으니 아래와 같이short_content
로 10글자로 slicing 해줄 수 있고 이는list_display
에 함수이름을 매칭함으로서 적용할 수 있습니다.
-
list_display_links
admin 사이트에서 세부 항목으로 들어가는 link 를 어디에 걸어줄 지 선택할 수 있습니다. 기본적으로는 가장 앞에 오는 field 에 링크를 걸게 되는데 예시의 경우, id 에 있는 것 보다는 title 에 있는게 더 자연스러울 거 같아서 title에 걸어주었습니다.
# core/admin.py @admin.register(Post) class MyAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'short_content', 'is_published' ] list_display_links = ['title'] def short_content(self, post): return post.content[:10]
-
list_filter
list_filter 를 통해서는 오른쪽 UI 를 통해서 원하는 값들만 filtering 해서 볼수 있습니다.
# core/admin.py @admin.register(Post) class MyAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'short_content', 'is_published' ] list_display_links = ['title'] list_filter = ['is_published'] def short_content(self, post): return post.content[:10]
-
search_fields
admin 에서 검색 UI 를 통해서 원하는 데이터를 검색할 수 있습니다.
search_fields
도title
에 대해서만 걸어주었습니다.@admin.register(Post) class MyAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'short_content', 'is_published' ] list_display_links = ['title'] list_filter = ['is_published'] search_fields = ['title'] def short_content(self, post): return post.content[:10]
마지막으로 이들에 대한 최종적인 admin 페이지 입니다.
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django] 관계를 표현하는 모델 필드, ForeignKey,OneToOneField,ManyToManyField (7) | 2019.07.20 |
---|---|
[Django] 데이터베이스 조회, queryset (4) | 2019.07.18 |
[Django] model 더 알아보기, ORM, model의 option, migrate (0) | 2019.07.17 |
[Django] visual studio code 를 이용한 debug (0) | 2019.07.14 |
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (3) (2) | 2019.07.11 |