본문 바로가기

django.core.exceptions.FieldError: Related Field got invalid lookup: icontains django.core.exceptions.FieldError django.core.exceptions.FieldError: Related Field got invalid lookup: icontains 이렇게 에러나 가는 경우에 FK 관련된 내용을 검토해보시면 됩니다. 저 같은 경우에는 search_fields에 FK를 바로 썼더니 에러가 나더라고요. 당연한거죠 ! search를 column 단위로 해야지 object 단위로 하려고 하니까 에러가 발생할 수 밖에요 ! 예를 들어서 news라는 FK가 있다고 합시다. search_fields에 적어줄 때는 news의 어떤 컬럼인지 적어줘야 합니다. search_fields = ('news',) #error title이라는 column이 있다고 가정하고 작성.. 더보기
DRF Custom Permission DRF Custom Permission Django에서 특정 그룹에 속해있는 유저만 실행할 수 있는 viewset을 만들어봅시다 !! 일단 "NGEE" 라는 그룹이 생성되어 있다고 가정할 때 아래와 같은 permission 클래스를 하나 만들어줍니다. ngeePermission의 has_permission이 하는 일은 request.user.groups 이름을 가지고 와서 거기에 NGEE가 있는지 없는지를 리턴해줍니다. NGEE 라는 그룹에 속해있다면 True가 리턴될 것이고 반대로 속해있지 않다면 False가 리턴되겠죠? from rest_framework.permission import BasePermission class ngeePermission(BasePermission) def has_perm.. 더보기
Django Test - pytest, reuse, create db, migration 등 간단 소개 pytest -p no:warnings DJANGO TEST - PYTEST pytest를 사용하면 테스트 데이터베이스를 다시 만들지 않아도 되니까 테스트 시작 속도가 빠르죠. 그래서 많이들 사용하시는 것 같습니다. 저도 테스트 할 때 pytest로 돌리는데 일단 ini는 기본적으로 reuse 옵션을 주고 돌립니다. 이유는 이미 생성된 test db를 사용하고 싶기 때문이죠. pytest -s --reuse-db 하지만 처음 테스트를 돌리거나 모델(model)의 변경이 있었다면 기존 test db 구조와 테스트가 돌아가는 코드가 맞지 않겠죠. 예를 들어서 없는 테이블에 접근하려고 한다거나? 없는 컬럼을 사용해서 테스트 한다거나 등등 그럴 때는 --create-db 옵션을 주고 돌립니다. 다시 정리하면 p.. 더보기
Django Mysql Warning - utf8mb4 Django에서 DB를 mysql로 사용하는 경우에 아래와 같은 WARNING을 만나게 되는 경우가 있습니다. django_mysql.W003 The character set is not utf8mb4 for database connection 'default' HINT: The default 'utf8' character set does not include support for all Unicode characters. It's strongly recommended you move to use 'utf8mb4'. See: https://django-mysql.readthedocs.io/en/latest/checks.html#django-mysql-w003-utf8mb4 해당 문서를 확인해보니까 간단하.. 더보기
Django Render로 넘어온 context 사용하기 Django Render, Context, Templates Django에서 Render로 template를 그려줄 때 같이 보내주는 context를 사용할 수 있습니다. #views.py result_json = {} .... return render(request, 'test.html', { 'sample_data':mark_safe (json.dumps(result_json, sort_keys=False, separators=(',', ':'))), }) sample_data를 사용하기 위해서 template에서는 아래와 같이 할 수 있죠. var data = jQuery.parseJSON(JSON.stringify({{sample_data}})); context가 꼭 json 형태여야 하는 것은 .. 더보기
Django Ckeditor File Upload Permission 아주아주 멋진 django ckeditor로 게시글 작성하는 Form을 만들 수 있습니다. 이미지 업로드, 파일 업로드도 구현하지 않고 그냥 Ckeditor에 있는 것을 사용해도 좋고요. 다만 file upload의 경우에 권한 에러가 나더라고요. 소스코드를 확인해보니까 Staff 이상만 업로드 할 수 있어서 저는 풀어서 사용하고 있습니다. 권한에 맞춰서 사용할 수 있도록 추가 구현하면 되겠죠? if django.VERSION >= (1, 8): urlpatterns = [ url(r'^upload/', views.upload, name='ckeditor_upload'), url(r'^browse/', never_cache(staff_member_required(views.browse)), name='c.. 더보기
Favicon Image Add to Django Admin Site 장고 어드민 사이트 (Django Admin Site)에 파비콘 이미지를 추가하는 방법을 요약해봤어요. 1. templates/admin/base_site.html 을 만들어서 원래 django에서 제공하는 base_site.html 내용을 그대로 붙여넣습니다. base_site.html의 위치는 ......../lib/python2.7/site-packages/django/contrib/admin/templates/admin에 있습니다. python 버전이나 virtualenv 환경에 따라서 약간 다를 수 있지만 django 아래 부터는 동일할거에요. 열어보시면 아래 그림과 같습니다. 물론 여기에 있는 코드를 고치면 되겠지만 서버로 배포할 때에는 또 서버에서 수정해야 하니까 불편하죠. 그래서 여러분의 .. 더보기
DRF - list_route, detail_route >> @action 변경 DRF (Django Resf Framework)에서 list_route와 detail_route는 각각 아래와 같이 변경해야 합니다. from rest_framework.decorators import action @action(detail=False) #list_route @action(detail=True, methods=['post']) #detail_route 이제 list_route, detail_route가 action으로 합쳐졌기 때문인데요. 아래 홈페이지 내용을 참고하세요. https://www.django-rest-framework.org/community/3.8-announcement/#action-decorator-replaces-list_route-and-detail_route a.. 더보기
django 'load staticfiles' and 'load static' django에서 {% load staticfiles %} 와 {% load static %} 둘 중에 어떤 것을 사용하는게 맞을까요? 공식 문서에서는 {% load static %} 을 추천하고 있습니다. https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#static pytest로 돌려보시면 {% load staticfiles %} >>>> {% load static %} 으로 변경하라는 warning이 계속 나와요. 이런 것들을 보았을 때 앞으로는 load static을 사용하는게 맞는 것 같습니다. 아마도 load staticfiles가 삭제될 예정이겠죠. 저도 load static으로 모두 변경했어요. 테스트 과정에서 나오는 warning.. 더보기
Django Admin : site register Django Admin 페이지에서 site를 추가해보면 domain_name과 display_name이 나옵니다. ID는 표시되지 않는데요. 가끔 setting.py 에 SITE_ID를 적어야 하는데정확한 값을 알려면 DB를 접속하거나 CODE를 더 작성해야 하니까요. ID가 표시되면 좋겠죠. 아래와 같이 ID를 추가하려면 site를 unregister를 통해 해제했다가 다시 register를 통해 불러와야 합니다. 코드는 아래와 같습니다. 더보기
Django Rest Framework : 3.5 to 3.8 Django + Django Rest Framework 버전업이 쭉쭉 되는 것 같아요. 아니면 제가 좀 늦게 버전업을 따라가는 걸지도 모르겠네요. 3.5 to 3.8에서 아래와 같은 warning이 발생하더라고요. 감히 DEFAULT_PAGINATION_CLASS를 설정하지 않고 PAGE_SIZE를 설정했다고 하는군요. 해결 방법은 DEFAULT_PAGINATION_CLASS를 설정하거나 PAGE_SIZE 설정을 닫거나 이겠죠.저는 PAGE_SIZE 설정을 주석처리 해버렸습니다. DEFAULT_PAGINATION_CLASS 와 관련한 DRF 문서는 http://www.django-rest-framework.org/api-guide/pagination/#pagination 요걸 참고하시면 될 것 같습니다... 더보기
장고 어드민 커스터마이징 (Django Admin Customizing) 와 ! 아래 사이트 정말 좋네요. 장고 어드민 사이트 변경하고 싶을 때 항상 구글링 해왔는데요. 정말 잘 정리된 것 같아요. 요 내용 하나씩만 따라하면 왠만한 커스터마이징은 쉽게 할 수 있을 것 같습니다. 오랜만에 정말 마음에 드는 사이트를 알게되서 공유해봅니다. https://books.agiliq.com/projects/django-admin-cookbook/en/latest/ 더보기
Django User Password Change using Command Line Django 사용자 패스워드를 변경하기 위한 Command Line은 아래와 같아요. python manage.py changepassword user_name 입력하게 되면 password를 다시 입력할 수 있습니다.successfully for user 'user_name' 메시지가 나왔다면 성공적으로 변경된 것입니다. 더보기
Django Admin : edit link disable Django Admin 페이지에서 모델에 대한 객체를 추가하거나 삭제, 수정하는 것이 가능하죠. 아무런 설정을 하지 않았다면 아래와 같은 그림을 볼 수 있습니다. 주로 ID를 선택하면 수정 페이지로 이동합니다. 아래는 수정 페이지이고요. 코드에 아래와 같이 list_display_links = None으로 설정하면 수정페이지로 이동하는 링크가 모두 제거됩니다. 잘 안보이실 수도 있지만 ID Column은 링크가 삭제되면서 평범한 텍스트가 되었습니다. 당연히 클릭해도 아무런 반응이 없습니다. 이번에는 list_display_links에 몇 개의 column을 입력해봤습니다.결과는 쉽게 예상되시죠? 아래 그림과 같이 list_display_links 에 지정한 column에 모두 링크가 생성되었습니다. 아래.. 더보기
Django Rest Framework : 3.3.3 to 3.5.x Django를 1.9.x 에서 1.10.x로 올리면 Django Rest Framework 도 올려줘야 합니다. 저는 아마도 3.3.3 에서 3.5.x 로 올렸는데요. 몇 가지 에러가 있었던 것 같지만 가장 기억에 남는 부분은 Serializer에 fileds 값을 잘 지정해야 한다는 것입니다. 3.3.3 에서는 fields 값을 지정하지 않으면 자동으로 모든 값에 대해서 serializer가 작동했다면 3.5.x에서는 모두 사용할 것이라면 __all__으로 지정해야하고 그렇지 않다면 특정 field를 지정해줘야 합니다. 그러니깐 소스코드를 보시죠. 3.3.3에서도 특정 field를 사용했던 코드는 문제 없이 작동하겠죠. 다만 모든 field를 사용하기 위해서 비워두고 지나갔던 코드들은 3.5.x에서 에.. 더보기
Django Admin : list_filter, ForeignKey 이전 글에 좀 더 붙여봅니다. 2017/04/16 - Django Admin : list_filter, SimpleListFilter 앞의 포스팅의 결론은 SimpleListFilter로 필요한 것들을 만들 수 있다는 것이고요. (물론 다는 아니겠지만요 !) 여기서는 SimpleListFilter에 사용되는 Column이 ForeignKey 값을 가지고 있으면 어떻게 해야 하는 지에 대해서 적어둡니다.Django를 많이 사용하시는 분들은 당연히 잘 아시겠지만 __ (언더 바 2개) 로 ForeignKey가 가르키고 있는 데이터에 접근할 수 있는데요.SimpleListFilter에 parameter_name에도 동일하게 적용됩니다. Filter가 추가되는 모델에는 book이라는 ForeignKey가 존재하.. 더보기