일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- double ended queue
- vscode
- 구조체와 클래스의 공통점 및 차이점
- c++
- string 함수
- 2557
- iOS14
- k-eta
- correlation coefficient
- 입출력 패턴
- Django Nodejs 차이점
- 연결요소
- 입/출력
- 엑셀
- getline
- 프레임워크와 라이브러리의 차이
- string 메소드
- Django란
- 시간복잡도
- 표준 입출력
- scanf
- 자료구조
- EOF
- UI한글변경
- 알고리즘 공부방법
- 이분그래프
- Django의 편의성
- 매크로
- 장고란
- 백준
- Today
- Total
Storage Gonie
36. (app2) Django admin페이지 customize하기 본문
1. 데이터 입력순서 바꾸기
- admin.py에서 ModelAdmin을 상속받은 클래스를 생성해서 fields에 입력받을 순서를 지정해주고, 이 클래스를 모델과 함께 register 해주면 순서를 바꿀 수 있다.
admin.site.register(Question)
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date','question_text']
admin.site.register(Question, QuestionAdmin)
2. 입력폼에서 중간제목 넣기
- fields 대신에 fieldsets를 사용하여 중간제목을 넣어 카테고리화 하여 보여줄 수 있다.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
3. Question, Choice 두 모듈을 둘 다 한번에 입력받기
- admin.StackedInline을 상속받은 클래스를 생성하고 입력받을 모델과 몇개를 입력받을 지 지정해준다.
- 그런 뒤 QuestionAdmin클래스 내부에 inlines 를 추가하고 생성한 클래스이름을 넣어준다.
- StackedInline과 TabularInline 둘중에 하나를 선택해서 사용할 수 있다.
<admin.StackedInline을 이용한 디자인>
class ChoiceInline(admin.StackedInline):
model = Choice # 어떤 모델을 입력받을 것인가.
extra = 1 # 한번에 객체 몇개의 내용을 입력받을 것인가?, 1이어도 짜장,짬뽕을 가지고 있어서 2개 입력칸이 만들어짐.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
<admin.TabularInline을 이용한 디자인>
class ChoiceInline(admin.TabularInline):
model = Choice # 어떤 모델을 입력받을 것인가.
extra = 1 # 한번에 객체 몇개의 내용을 입력받을 것인가?, 1이어도 짜장,짬뽕을 가지고 있어서 2개 입력칸이 만들어짐.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
4. 보기 / 감춤
- 'classes' : ['collapse']를 속성으로 추가해주면 적용됨
class ChoiceInline(admin.TabularInline):
model = Choice # 어떤 모델을 입력받을 것인가.
extra = 1 # 한번에 객체 몇개의 내용을 입력받을 것인가?, 1이어도 짜장,짬뽕을 가지고 있어서 2개 입력칸이 만들어짐.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date'], 'classes': ['collapse']}), # fields는 입력받는 데이터, classes는 속성
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
5. 객체내용 출력(함수연산결과 포함)
- list_display 에 tuple 형태로 속성이름을 넣어주면 추가적인 내용을 보여준다. 이때 메소드의 이름을 넣으면 그 결과가 보여지기도 한다.
class ChoiceInline(admin.TabularInline):
model = Choice # 어떤 모델을 입력받을 것인가.
extra = 1 # 한번에 객체 몇개의 내용을 입력받을 것인가?, 1이어도 짜장,짬뽕을 가지고 있어서 2개 입력칸이 만들어짐.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date'], 'classes': ['collapse']}), # fields는 입력받는 데이터, classes는 속성
]
inlines = [ChoiceInline] # 함께 입력받을 모델
list_display = ('question_text', 'pub_date', 'was_published_recently') # 객체내용으로 보여질 내용
admin.site.register(Question, QuestionAdmin)
6. 정렬기능 추가
- QUESTION_TEXT, DATE_PUBLISHED는 누르면 정렬되는 기능이 기본적으로 제공되는데
- 함수의 결과값을 보여주는 WAS PUBLISHED RECENTLY은 정렬기능이 없다. 이를 정렬기능이 활성화 되도록 해보자.
- models.py에서 Question클래스에 아래의 한줄을 추가해주면 WAS PUBLISHED RECENTLY에도 정렬기능이 활성화 된다. 단, 지정해준 pub_date 값을 기준으로 정렬됨.
was_published_recently.admin_order_field = 'pub_date'
7. False, True 대신 O, X 모양으로 보여지게 하기.
- models.py에서 Question클래스에 아래의 두줄을 추가해주면 True False 대신 O, X 모양으로 보여진다.
- 또한 WAS PUBLISHED RECENTLY 이름 대신에 아래 입력해준 이름이 보여진다.
was_published_recently.boolean = True # 값이 O, X 모양으로 나타나게 됨.
was_published_recently.short_description = 'published recently?' # WAS PUBLISHED RECENTLY 대신 여기에 입력해준 값이 보여짐.
6, 7 을 한번에 보면아래와 같다.
class Question(models.Model):
question_text = models.CharField(max_length = 200)
pub_date = models.DateTimeField('date published') # ( ) 에 들어간 텍스트는 그냥 주석이다.
# 객체를 그대로 출력할 때 객체의 내용을 보여주도록 오버라이딩
def __str__(self):
return self.question_text
# 객체가 가지고 있는 날짜 >= 하루전의 시간(어제)라면 True
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
was_published_recently.admin_order_field = 'pub_date' # 정렬버튼을 활성화 하고, 누를시 pub_date기준으로 정렬이 수행됨.
was_published_recently.boolean = True # 값이 O, X 모양으로 나타나게 됨.
was_published_recently.short_description = 'published recently?' # WAS PUBLISHED RECENTLY 대신 여기에 입력해준 값이 보여짐.
8. 리스트의 필터기능
- QuestionAdmin클래스에 list_filter를 추가하여 여기에 속성값을 주면 아래와 같은 디자인을 사용할 수 있음.
- 오른쪽에 필터가 추가되어서 클릭하면 그에 해당하는 객체들만 보여진다.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date'], 'classes': ['collapse']}), # fields는 입력받는 데이터, classes는 속성
]
inlines = [ChoiceInline] # 함께 입력받을 모델
list_display = ('question_text', 'pub_date', 'was_published_recently') # 객체내용으로 보여질 내용
list_filter = ['pub_date'] # 필터창 추가
admin.site.register(Question, QuestionAdmin)
9. 검색기능추가
- QuestionAdmin클래스에 search_fields를 추가하여 여기에 속성값을 주면 아래와 같은 디자인을 사용할 수 있음.
- 위 라인에 지정한 속성을 검색할 수 있는 창이 생긴다.
class QuestionAdmin(admin.ModelAdmin):
#fields = ['pub_date','question_text']
fieldsets = [
(None, {'fields': ['question_text']}),
("Date Information", {'fields': ['pub_date'], 'classes': ['collapse']}), # fields는 입력받는 데이터, classes는 속성
]
inlines = [ChoiceInline] # 함께 입력받을 모델
list_display = ('question_text', 'pub_date', 'was_published_recently') # 객체내용으로 보여질 내용
list_filter = ['pub_date'] # 필터창 추가
search_fields = ['question_text'] # 검색창 추가
admin.site.register(Question, QuestionAdmin)
'웹개발 > Django 웹서비스 개발(인프런)' 카테고리의 다른 글
38. (app2) 템플릿 확장을 이용한 admin 템플릿 수정 (0) | 2019.02.20 |
---|---|
37. (app2) 정적파일 적용 및 관리 (0) | 2019.02.20 |
35. (app2) view 및 템플릿 테스트하기 (0) | 2019.02.20 |
34. (app2) Django 버그 수정 및 테스트 자동화하기(tests.py이용) (0) | 2019.02.20 |
33. (app2) generic view를 적용한 Class-based views 방식의 URL 라우팅 (0) | 2019.02.19 |