6월, 2016의 게시물 표시

django admin 에 action 추가하기

django admin에서 데이터를 삭제하는 기능밖에 없는데,  다른 추가기능을 하고 싶으면 actions에 기능을 추가한다. admin 필드에 함수를 생성하고 아래와 같이 actions 목록에 추가한다. 함수에는 modeladmin, request, queryset 파라미터가 들어간다. queryset에 모델에 대한 쿼리셋 결과가 들어간다. 아래 코드는 수정하는 모델에 필드값을 U로 업데이트하는 내용이다. short_description 에는 admin에서 콤보목록에 보이는 값을 설정한다. def make_used(modeladmin, request, queryset):     queryset.update(use_flag='U') make_used.short_description = "Make seller's user_flag = USE" @admin.register(Seller) class SellerAdmin(admin.ModelAdmin):     list_display = ['trade_code', 'trade_name', 'use_flag',                     'email', 'createdby', 'updatedby', 'username', ]     actions = [make_used]

django admin 에서 query절 변경하기

admin 을 작성할때 특정한 데이터만 보고 싶거나 쿼리를 수정하고 싶을 때가 있다.  예를 들면 로그인 사용자가 등록한 데이터만 조회를 하고 싶을 때가 있는데 이럴 때는 get_queryset 함수를 재정의하면 된다. get_queryset에는 request 파라미터만 들어간다.  부모의 쿼리셋을 받은 다음 qs.filter를 통해서 조건을 추가하면 된다.  샘플 코드는 아래와 같다. 추가로 하나더 모델정보를 저장할때 필드의 값을 모두 채워서 저장을 하는데 마찬가지로 특정값은 기본값으로 지정하고 싶을 때 save_model 을 재정의한다. 데이터 모델은 obj 변수에 값을 지정하고 save() 함수를 호출하면 된다.  @admin.register(Item) class ItemAdmin(admin.ModelAdmin):     list_display = ['id', 'seller', 'item_code', 'item_name', 'price', ]     readonly_fields = ('seller',)     def get_queryset(self, request):         qs = super(ItemAdmin, self).get_queryset(request)         if request.user.is_superuser:             return qs         return qs.filter(seller__username=request.user)     def save_model(self, request, obj, form, change):         seller = Seller.objects.get(username=request.user)         obj.seller = seller         obj.save()