안녕하세요. 이번 시간에는 admin의 edit 메뉴에서 편집할 수 있는 필드들을 어떻게 보여주는지 알아보고 응용해 보도록 하겠습니다. 이전에 한 번 말씀을 드렸을지 모르겠지만, staff라고 해도 퍼미션에 is_superuser를 설정할 수 있는 권한이라던지, 비밀번호 등을 함부로 주면 안 될 겁니다. 이런 것을 방지하기 위해, 보여지는 필드들을 비활성화 시키는 방법이 있어요. 그 방법도 같이 알아볼게요. 먼저, get_fieldsets를 오버라이드 해 보겠습니다. obj가 None이면 self.add_fieldsets를 deepcopy한 것을 리턴합니다. 그게 아니라면, self.fieldsets를 deepcopy한 것을 리턴합니다. self.add_fieldsets를 먼저 봅시다. fields가 u..
웹/장고 검색 결과
마이그레이션 파일을 만들 때 가끔 RunPython을 돌리는 경우가 있습니다. 예를 들자면, 빈 게시물의 경우 '-'을 남긴다던지 하는 식입니다. 이 때, django의 models.py에 있는 메타 정보와 마이그레이션 당시 메타 정보가 일치하지 않아서 migration이 되지 않는 문제가 발생할 수 있습니다. 이에 대해 간단하게 알아보겠습니다. 먼저, app의 showmigrations를 봅시다. 보면 0003까지는 잘 적용되었는데, 0004가 적용되지 않았음을 알 수 있습니다. app의 0004번 migration 파일은 위와 같습니다. 먼저, gen_random_str은 랜덤한 문자를 생성합니다. 다음에, reply의 content가 비어 있는 경우, 15자의 랜덤한 문자열을 생성해서 댓글에 저장합..
안녕하세요. admin page에서, User나 Group에 대해서 custom하게 처리해야 할 때가 있을 겁니다. 예를 들자면, is_superuser의 경우, 못 보게 처리를 한다던지. auth_user_model을 바꾸는 방법도 있을 듯 합니다. 그런데, 예전에 제가 처리했던 방법을 공유해 드리도록 하겠습니다. 문서에 나온 방법과 비슷한 것도 있고요. 먼저, UserAdmin을 override한 클래스를 admin.site에 register를 하려고 하면, 이미 등록되었다고 거부할 겁니다. 이는 INSTALLED_APPS를 보면 쉽게 유추할 수 있는데요. django.contrib.admin 단계에서 register가 되겠구나. 정도로만 추측할 수 있어요. ContentTypesConfig가 들어왔..
우리는 장고에서 오른쪽에 나타나는 list filter를 custom하게 만들고 싶습니다. 예를 들어, ㄱㄴㄷ 순으로 본다던지. 이러한 경우, 우리는 custom하게 필터를 줄 수 있는데요. 그 방법에 대해 알아보겠습니다. 먼저 admin의 SimpleListFilter를 override합니다. 저는 유저 이름을 가지고 필터를 만들 것이니, class 이름은 UserNameFilter로 하겠습니다. title과 paramter_name은 각각 "username", "username"으로 하였는데요. 이 둘의 역할은 추후에 설명하겠습니다. 여기에서는 2개의 함수를 override를 할 것인데요. lookups와 queryset 이 둘을 override 할 겁니다. 먼저, lookups는 필터에 어느 값이 ..
안녕하세요. 이번 시간에는 django admin의 list_filter에 대해 간단하게 알아보고, range filter를 적용하는 방법도 같이 알아볼까 합니다. 먼저, list_filter는 오른쪽에 FILTER로 나오는 것을 의미해요. post 모델에 대해서, "user"로 필터를 걸어보겠습니다. 그러면, admin의 post view 페이지에서 FILTER 부분은 chokw, chokw1이 나오게 되는데요. post에서 user는 auth.user를 참조하는 외래키입니다. chokw1을 선택했을 때, 어떻게 쿼리가 날라가는지 보겠습니다. user__id__exact=2로 날라갑니다. foreign key의 id값과 일치하는 것일까요? chokw1이라는 username을 가진 유저는 id가 2네요...
최근댓글