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()

댓글

이 블로그의 인기 게시물

dtsrun 실행하기

Set nocount on 옵션 설정하기

Slug가 뭘까?