_ init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 패키지에 포함된 디렉터리에 _ init _.py 파일이 없다면 패키지로 인식되지 않는다.
※ python3.3 버전부터는 init.py 파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 버전 호환을 위해 init.py 파일을 생성하는 것이 안전한 방법이다.
admin site 을 튜닝하기 위한 곳
order - admin.py
from django.contrib import admin
from .models import Order, OrderProduct
from user.models import User
from product.models import Product
# Register your models here.
class OrderAdmin(admin.ModelAdmin):
list_display = ('username',
'total_price', 'ordered_date',)
class OrderProductAdmin(admin.ModelAdmin):
list_display = ('order', 'product', 'quantity',)
admin.site.register(Order, OrderAdmin)
admin.site.register(OrderProduct, OrderProductAdmin)
django>contrib>admin>options.py>ModelAdmin 에 들어가서 보면 여러 옵션들이 있는데, list_display 를 사용한 예 이다.
django>contrib>admin>options.py>ModelAdmin
------------------------------------------
class ModelAdmin(BaseModelAdmin):
"""Encapsulate all admin options and functionality for a given model."""
list_display = ('__str__',)
이하생략
그냥
admin.site.register(Order)
처럼 모델을 바로 등록 시켜버릴수도있다.
그럼 해당 Order 모델에서
class Meta:
db_table = 'orders'
verbose_name = '주문 장바구니'
verbose_name_plural = '주문 장바구니'
로 등록되어진 주문 장바구니라는 이름으로만 등록이 되어진다.
그리고 공부 중에 새로운 방법을 배웠는데 이러한 방식이 더 일반적으로 잘 쓰인다고 한다.
원래 사용했던 방식과 비교를 해보자.
@admin.register(OrderProduct)
class OrderProductAdmin(admin.ModelAdmin):
list_display = ['order', 'product', 'quantity']
list_display_links = ['order', 'product']
vs
class OrderProductAdmin(admin.ModelAdmin):
list_display = ('order', 'product', 'quantity',)
admin.site.register(OrderProduct, OrderProductAdmin)
list_display_links 옵션을 사용하면 컬럼값에 링크를 생성하여 준다. 따로 지정하지않으면 첫번쨰 필드만 링크가 생성된다.
그 외에는
list_display : Admin 목록에 보여질 필드 목록
list_display_links : 목록 내에서 링크로 지정할 필드 목록 (이를 지정하지 않으면, 첫번째 필드에만 링크가 적용)
list_editable : 목록 상에서 수정할 필드 목록
list_per_page : 페이지 별로 보여질 최대 갯수 (디폴트 : 100)
list_filter : 필터 옵션을 제공할 필드 목록
actions : 목록에서 수행할 action 목록
와 같은 옵션을 사용 할 수있다.