bookmark/admin.py
from django.contrib import admin
from bookmark.models import Bookmark
@admin.register(Bookmark)
class BookmarkAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'url')
BookmarkAdmin
클래스는 Bookmark 클래스가 Admin 사이트에서 어떤 모습으로 출력할지를 정의하는 클래스이다. @admin.register()
데코레이터를 사용하여 어드민 사이트에 등록한다. 데코레이터 대신에 register()
함수를 사용하여 작성도 가능하다.
bookmark/admin.py
from django.contrib import admin
from bookmark.models import Bookmark
class BookmarkAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'url')
admin.site.register(Bookrmark, BookmarkAdmin)
runserver 이후에 실행된 어드민 사이트에서 로그인을 하면 장고에서 기본적으로 제공하는 user, group 테이블 이외에 새로 추가된 bookmark 테이블이 보인다. bookmark 테이블 옆의 add 버튼을 누르면 models.py에 정의한 테이블의 모습을 볼 수 있다.
bookmark/views.py
from django.views.generic import ListView, DetailView
from bookmark.models import Bookmark
class BookmarkListView(ListView):
model = Bookmark
class BookmarkDetailView(DetailView):
model = Bookmark
object_list
를 사용하는 것이고, 2번째는 템플릿 파일명을 모델명 소문자_list.html
형식의 이름으로 지정하는 것이다. 템플릿 파일명은 디폴트로 bookmark/bookmark_list.html
이 된다.object
를 사용하는 것이고, 두번째는 템플릿 파일명은 모델명 소문자_detail.html
형식의 이름으로 지정하는 것이다. 템플릿 파일명은 디폴트로 bookmark/bookmark_detail.html
이 된다. 테이블 조회 조건에 사용되는 pk값은 URLconf에서 넘겨받는데, 이에 대한 처리는 DetailView 제네릭 뷰에서 알아서 처리해준다.bookmark/models.py
class Bookmark(models.Model):
title = models.CharField('Title', max_length=100, blank=True)
url = models.URLField('URL', unique=True)
def __str__(self):
return self.title
bookmark/templates/bookmark/bookmark_list.html
...
<div id="content">
<h1>Bookmark List</h1>
<ul>
{% for bookmark in object_list %}
<li><a href="{% url 'detail' bookmark.id %}">{{ bookmark }}</a></li>
{% endfor %}
</ul>
</div>
...
__str__()
메소드를 호출해서 그 결과를 출력한다. 위의 코드대로라면 객체의 title이 출력된다.blog/models.py
class Post(models.Model):
...
slug = models.SlugField('SLUG', unique=True, allow_unicode=True, help_text='one word for title alias.')
...
allow_unicode
: 옵션을 추가하면 한글 처리가 가능help_text
: 해당 컬럼을 설명해주는 문구로 폼 화면에 나타남. admin 사이트에서 확인 가능blog/admin.py
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'modify_dt')
list_filter = ('-modify_dt', )
search_fields = ('title', 'content')
prepopulated_fields = {'slug': ('title', )}