티스토리 뷰

development/django

[django] admin.py 알아보자!

burningrizen 2018. 4. 18. 03:03


장고 admin.py 에는 각 model field 의 값고 필터링, 검색, 특정함수를 정의해서 사용할 수있다.



아래 코드에 요소들을 하나씩 살펴보자


@admin.register(Shipping)
class ShippingAdmin(admin.ModelAdmin) :
list_display = ['date','delivery', 'amount_comma', 'total_comma', 'ids' ,]
ordering = ['-id',]
search_fields = ['date', 'amount', 'total', 'ids']
list_filter = ['delivery']
readonly_fields = ['ids', 'detail', 'delivery']
list_per_page = admin_common.global_page_size
actions = ['download']

def amount_comma(self, shipping):
return intcomma(shipping.amount)
amount_comma.short_description = '총 수량(박스)'

def download(self, request, queryset):
if queryset.count() > 1 :
self.message_user(request, self.DOWNLOAD_ERROR_MSG)
else :
shipping = queryset.last()
self.set_delivery(shipping)
orders = self.get_orders_for_csv(shipping)
filename = shipping.date + '.csv'
response = fileIO.download_queryset(orders, filename, 'delivery','text/csv', 'euc-kr')
return response



[list_display]


models.py 에 어떤 field 들을 보여줄지 정의하는 곳이다.


field 이름을 직접 써주어도 되고 함수를 적어줘도 된다.


함수를 적어주면 함수명이 표기되고 리스트에는 리턴값이 표시된다.


함수는 weight_comma 의 경우를 살펴보자.



return intcomma(product.weight)


함수의 리턴값을 어드민 페이지에 표시한다.


intcomma 는 숫자를 세자리마다(예: 1,000) 콤마를 찍는 것이라서 가독성이 좋다.


아래 코드를 상단에 선언해 주자.


from django.contrib.humanize.templatetags.humanize import intcomma



리스트 뷰에서는 3번째 인자가 amount_comma 로 보이는데  


amount_comma.short_description = '총 수량(박스)'


이렇게 정의해 주면 '총 수량(박스)' 로  보이게 된다.  


아래 언급할 actions 에서도 동일하게 적용할 수 있다.




[ordering]

orderby 처럼 말 그대로 정렬을 어떻게 하냐는 건데 보통 -id 하면 최신순이고


id 로 하면 그것의 역순이다.


ordering = ['-id',]


이것도 원하는 field 를 정의해주고 내림차순일 경우 field 명 앞에 - 를 붙여 주면된다.


id 는 알다시피 자동으로 생성되는 pk 와 동일한 방식으로 생성된다.




[list_per_page]


한 페이지에 몇개의 리스트가 들어가는지 정의한다.


기본값으로 100으로 지정되어 있다. 


보기 편한대로 지정해 주면 된다.




[list_editable] 


리스트의 내용을 수정하려면 리스트를 클릭하여 변경해주어야 한다.


빈번히 변경되는 것이라면 번거로울 수 있다.


여기에 추가해 놓는다면 해당 리스트에 진입하지 않고 리스트뷰에서


바로 변경할 수 있다.




[search_fields]


리스트에서 특정 field를 검색하고 싶을때 해당 field 를 추가해 주면 된다.


예를들어서 name 이라는 field 에서 특정 이름을 검색하고 싶을때 추가해 주면된다.


단 foregnkey 는 추가해주면 오류가 발생한다.




[readonly_fields]


특정 field 를 read 만되고 변경이 안되도록 할 수 있다. models.py 에서 


editable=false 는 아예 보이지 않지만 이것은 보이지만 변경할 수가 없다.





[actions]


리스트뷰에서 특정 필드를 선택하고 선택된 리스트를 queryset 으로 받아서


특정 함수를 실행할 수 있다.


request 도 인자로 받기 때문에 유저권한에 따라 제한이 가능하다.

 


actions = ['download']


여기서 함수 명을 지정해 주고


def download(self, request, queryset):
if queryset.count() > 1 :
self.message_user(request, self.DOWNLOAD_ERROR_MSG)
else :
shipping = queryset.last()
self.set_delivery(shipping)
orders = self.get_orders_for_csv(shipping)
filename = shipping.date + '.csv'
response = fileIO.download_queryset(orders, filename, 'delivery','text/csv', 'euc-kr')
return response
download.short_description = '다운로드'


함수를 정의해 주면된다.


download.short_description = '다운로드'


'다운로드' 로 버튼을 정의하려면 description 을 위와 같이 정의해 주면 된다.

'development > django' 카테고리의 다른 글

[django] kakaotalk chatbot 구현  (0) 2018.04.15
[django] apache2 연동  (0) 2018.04.13
[django] 장고 설치하기  (0) 2018.04.13
댓글