본문 바로가기

Back-end & Server/Django

[Django] Admin 사이트

728x90
반응형

Admin 계정 생성

먼저 터미널에 다음과 같은 명령어를 실행

python manage.py createsuperuser

원하는 사용자 이름을 입력

Username : admin

원하는 전자 메일 주소 입력

Email address : pupbani@pupletokki.com

비밀번호 입력

Password : *********
Password (again) : *********

 

Admin 사이트

서버를 실행하고 /admin/로 접속하기

만들었던 관리자 계정으로 로그인

이 웹 페이지에서는 다양한 권한과 같은 사용자 속성을 변경할 수 있음

History 페이지를 통해 변경 사항을 확인할 수 있음

 

관리자 페이지에서 데이터베이스 관리

만들어둔 앱 디렉터리 내admin.py 라는 파일에 다음과 같은 코드를 삽입해 3개의 테이블을 추가함

from .models import Publisher, Author, Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

 

blank=True을 통해 공백값을 허용하거나 null=True을 통해 NULL 값을 허용하여  필드를 선택적으로 만들 수 있음

class Book(models.Model):
    ...
    publication_date = models.DateField(blank=True, null=True)

 

verbose_name = '값'을 통해 필드 레이블의 값을 특정한 타입으로 지정할 수 있음

email = models.EmailField(blank=True, verbose_name='e-mail')
# 하이픈을 갖는 전자 메일

 

admin.py를 수정하여 표시형식을 추가할 수 있음

# admin.py

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('first_name','last_name','email')

...
admin.site.register(Author,AuthorAdmin)

 

last_filter를 통해 변경 목록 옆에 필터를 만들 수 있음

date_hierarchy날짜 드릴다운 탐색 목록이 나타남

ordering을 통해 보여지는 순서를 정렬할 수 있음

class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',) # publication_date 기준 필터 생성
    date_hierarchy = 'publication_date' # 날짜 드롭 다운
    ordering = ('-pupblication_date',) # 역순 정렬

 

편집 양식 사용자 정의

위에서 만들었던 ~Admin 클래스에 필드를 추가하여 편집 양식을 커스텀 할 수 있음

  • fields 옵션으로 특정 필드가 완전히 편집되지 않도록 제외할 수 있음
class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('title','authors','publisher') #publication_date 제외

  • filter_horizontal로 편집 폼을 변경할 수 있음(튜플로 지정한 필드만 폼 변경)(ManyToManyField에서만 작동)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    filter_horizontal = ('authors',) # authors 만 변경

  • filter_vertical로 편집 폼을 변경할 수 있음(튜플로 지정한 필드만 폼 변경)(ManyToManyField에서만 작동)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    filter_vertical = ('authors',)

 

관리자 웹 사이트는 ForeignKey 필드에 대해 간단한 select 상자를 사용하지만 ManyToManyField의 경우는 드롭 다운에 표시할 모든 관련 개체를 선택해야하는 오버 헤드가 발생하지 않기를 원하는 경우가 있음.

  • 위의 문제를 해결하기 위해 raw_id_fields를 사용하면 select 대신 간단한 텍스트 입력 상자로 나타남
class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    filter_vertical = ('authors',)
    raw_id_fields = ('publisher',)

 

사용자, 그룹 및 사용 권한

Admin 사이트에 접근할 수 있는 권한 및 계정 생성 등을 생성할 때 역할에 따라 다르게 부여해야함

그룹도 사용자와 마찬가지임

728x90
반응형

'Back-end & Server > Django' 카테고리의 다른 글

[Django] 고급 기능들  (0) 2023.01.20
[Django] 폼(Form)  (0) 2023.01.20
[Django] 모델  (0) 2023.01.16
[Django] 템플릿  (0) 2023.01.01
[Django] 뷰와 URLconfs  (0) 2022.12.28