[한빛] 파이썬 웹프로그래밍 04장. Django의 핵심 기능(1/6. Admin 사이트 꾸미기)
- Admin : 데이터베이스에 데이터의 생성, 조회, 변경, 삭제 기능
- polls/admin.py 수정
- 초기 polls/admin.py
12345678from django.contrib import admin# Register your models here.from polls.models import Question, Choiceadmin.site.register(Question)admin.site.register(Choice)
- 필드 순서 변경 : polls/admin.py 수정
1234567891011from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass QuestionAdmin(admin.ModelAdmin):fields= ['pub_date', 'question_text']admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- 각 필드를 분리해서 보여주기기 : polls/admin.py 수정
1234567891011121314from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass QuestionAdmin(admin.ModelAdmin):fieldsets = [('Question Statement', {'fields': ['question_text']}),('Date Information', {'fields' : ['pub_date']}),]admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- 필드 접기 : polls/admin.py 수정
1234567891011121314from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass QuestionAdmin(admin.ModelAdmin):fieldsets = [('Question Statement', {'fields': ['question_text']}),('Date Information', {'fields' : ['pub_date'], 'classes':['collapse']}),]admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- Question과 Choice를 한 화면에서 변경하기 : polls/admin.py 수정
1234567891011121314151617181920from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass ChoiceInline(admin.StackedInline):model = Choiceextra = 2class QuestionAdmin(admin.ModelAdmin):fieldsets = [(None, {'fields': ['question_text']}),('Date Information', {'fields' : ['pub_date'], 'classes':['collapse']}),]inlines = [ChoiceInline] # Choice 모델 클래스 같이 보기admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- 테이블 형식으로 컬럼 지정하기 : polls/admin.py 수정
1234567891011121314151617181920from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass ChoiceInline(admin.TabularInline):model = Choiceextra = 2class QuestionAdmin(admin.ModelAdmin):fieldsets = [(None, {'fields': ['question_text']}),('Date Information', {'fields' : ['pub_date'], 'classes':['collapse']}),]inlines = [ChoiceInline] # Choice 모델 클래스 같이 보기admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- 레코드 리스트 컬럼 지정하기 : polls/admin.py 수정전
- 레코드 리스트 컬럼 지정하기 : polls/admin.py 수정후
123456789101112131415161718192021from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass ChoiceInline(admin.TabularInline):model = Choiceextra = 2class QuestionAdmin(admin.ModelAdmin):fieldsets = [(None, {'fields': ['question_text']}),('Date Information', {'fields' : ['pub_date'], 'classes':['collapse']}),]inlines = [ChoiceInline] # Choice 모델 클래스 같이 보기list_display = ('question_text', 'pub_date')admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- list_filter 필터, search_fields 추가 : polls/admin.py 수정
-
1234567891011121314151617181920212223from django.contrib import admin# Register your models here.from polls.models import Question, Choiceclass ChoiceInline(admin.TabularInline):model = Choiceextra = 2class QuestionAdmin(admin.ModelAdmin):fieldsets = [(None, {'fields': ['question_text']}),('Date Information', {'fields' : ['pub_date'], 'classes':['collapse']}),]inlines = [ChoiceInline] # Choice 모델 클래스 같이 보기list_display = ('question_text', 'pub_date')list_filter = ['pub_date']search_fields = ['question_text']admin.site.register(Question, QuestionAdmin)admin.site.register(Choice)
- Admin 사이트 템플릿 수정
- 장고 설치 폴더 찾기 : python3 -c “import django; print(django.__path__)”
- templates 폴더 생성 : /django/mysite$ mkdir templates
- templates/admin 폴더 생성 : mkdir templates/admin
- template파일 base_site.html 복사 : cp /usr/local/lib/python3.6/dist-packages/django/contrib/admin/templates/admin/base_site.html templates/admin/
- settings.py 수정 : vi mysite/settings.py
- 수정전 :
123456789101112131415TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},] - 수정 후 :
12345678910111213141516import osTEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},]
- 수정전 :
- base_site.html 수정 : vi templates/admin/base_site.html
123456789{% extends "admin/base.html" %}{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}{% block branding %}<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_(' WHAN Django administration') }}</a></h1>{% endblock %}{% block nav-global %}{% endblock %} - 결과는 오류 : 최신버전에서 BASE_DIR 처리가 다르게 됨
- 장고 설치 폴더 찾기 : python3 -c “import django; print(django.__path__)”
- 초기 polls/admin.py