본문 바로가기
관리자

Programming-[Backend]/Django

(56)
[TIL] Django soft delete cascade (SafeDeleteModel), deleted null 아닌 항목만 찾기 soft Delete 연관관계가 있는 모델끼리는 SafeDeleteModel을 상속받고, Cascade 옵션이 적용되어 있다면 soft delete도 cascade 된다.SafeDeleteModel의 soft_delete_cascade_policy_action() 메서드를 사용하는 경우 적용된다. Post : RelatePost = 1 : N인 관계가 있고, RelatePost에서 post를 FK로 갖고 있을 때, 아래와 같이 SafeDeleteModel을 상속받고 FK로 CASCADE 옵션이 지정된 상황이라고 가정한다. class RelatePost(SafeDeleteModel): post = ForeignKey( Post, on_delete=CASCADE, related_name="relate_pos..
[TIL] Django bulk_update 방법과 주의사항 Django bulk update는 인자값으로 fields를 주어야한다. 모델의 어떤 필드를 업데이트할 것인지 직접 지정해줘야하는 것이다. 아래 코드에서 some_models =[] 에는 필드값이 업데이트된 Some_Model의 QuerySet 객체가 들어있다고 보면 된다. Some_Model.objects.bulk_update( some_models, batch_size=3000, fields=["status", "result"], ) 자바-스프링 계열은 JPA가 dirty checking을 알아서 해줬었는데.. 아쉽다 ㅠㅠ bulk_create, bulk_insert 시 주의할점 serializer에서 제공하는 validate가 먹히지 않을 수 있기 때문에 def validate_xxx 로 입력값에 ..
OpenAPI 명세, Swagger 기본 개념 : Django restframework, drf-spectacular로 swagger split OpenAPI 명세 개념 개요 여기서 말하는 것은 Open API가 아니라 붙여쓰는 OpenAPI이다. 참조 1에 따르면 Open API는 말 그대로 개방된 API로 날씨, 주소 정보 등 공개된 API를 의미한다. OpenAPI는 Restful API의 명세(Spec)를 규칙에 맞게 json이나 yaml로 표현하는 방식을 말한다. https://jojoldu.tistory.com/31 규칙: JSON, YAML로 표현 규칙에 맞게라고 했는데, 어떤 규칙을 가질까? 우선 json과 yaml 파일 형식에 대한 것은 대부분의 개발자가 알고 있으리라 생각된다. 그냥 어떤 정보를 표현하는 양식이라고 생각하면 된다. 아래 그림을 참고하자. 참조 2.https://levelup.gitconnected.com/yaml..
[TIL] django, postgresql에서 json column 내부값(key값) 조회하기 anti-pattern일 수 있지만, 아래처럼 많은 양의 데이터를 우선적으로 column 하나에 json으로 넣어야할 수 있다. 이런 경우 내부 값을 조회하는 postgresql의 문법을 위 예시에 적용하면 다음과 같다. select table.data -> 'length', table.data -> 'size', ... https://popsql.com/learn-sql/postgresql/how-to-query-a-json-column-in-postgresql Django에서도 더블 언더 스코어(__) 문법으로 이를 지원한다. def get_queryset(self): return ( self. queryset .filter( table__data__length__isnull=True, )
[작성중] Django 프로젝트 초기 에러 모음 1. ViewSet 관련 .as_view() actions가 .as_view() 괄호 안에 dict 형태로 반드시 정의되어야 한다. 아래처럼 작성해보자. all_view = { 'get': 'list', 'post': 'create', 'patch': 'update', 'delete': 'destroy' } urlpatterns = [ path(r"/ingredients/", IngredientsViewSet.as_view(all_view), name='ingredients') ]
[TIL] Pycharm에서 Python Console에 shell_plus 연결하기 shell_plus 설치 pip install django-extensions settings.py - INSTALLED_APPS에 ‘django_extensions’ 추가 (언더바임을 주의) 실행 그냥 터미널에서 아래 명령어로 실행해도 된다. python manage.py shell_plus Django Console 이용하기 터미널창 아래에 Python Console 을 이용하면 Pycharm의 설정에 연결된 python interpreter로 바로 연결되어 테스트가 가능하다. Preferences(설정) > Build, Execution, Deployment > Console > Django Console에 들어가서 Starting script 부분에 아래 복사본을 넣는다. 아래 코드는 shell ..
[DJANGO ORM 쿡북][작성중] 1. 테스트 환경 세팅(shell plus) 및 기본 함수 1. 테스트 환경 세팅 django 프로젝트를 시작하면 따로 DB를 연결해주지 않아도 기본적으로 sqlite3이 연결되어있다. 그리고 기본적으로 제공되는 User 등의 테이블이 있기 때문에 바로 연습이 가능하다. script 문들을 python이 제공하는 shell에서 입력하여 테스트해볼 수 있다. 그러나 django-extension 라이브러리에서 제공하는 shell_plus를 사용하면 import 문 등을 제외할 수 있고 기타 많은 기능들을 제공하므로 이를 이용하자. INSTALLED_APPS = [ ..., 'django_extensions', ...] sudo pip install django_extensions 터미널에서 다음 명령어를 입력해서 shell plus를 실행할 수 있다. python..
[중단] Django로 Pinterest 따라 만들기[3부 AWS] - 24. AWS로 Stack 배포, 도메인 연결, HTTPS 설정 1. Secret 설정 SECRET을 이전 강의들과 같이 추가해준다. 2. stack 배포 디렉토리 생성 EC2 서버의 디렉토리 내에 nginx.conf 설정파일을 넣어주기 위한 작업을 한다. cmd로 이전 글과 같이 EC2에 접속하고, home/ubuntu/ 디렉토리에서 sudo mkdir 명령어로 'django-course' 파일을 만든다. cmd 접속 시 'ubuntu' 라는 유저로 로그인했기 때문에, 명령어에 반드시 sudo가 포함되어야 한다. ssh -i {key 이름.pem} ubuntu@{IPv4 주소} sudo mkdir django_course 권한 부여 파일을 옮기는 것도 권한이 필요하기 때문에 home/ubuntu/ 디렉토리에서 아래 명령어로 ubuntu 유저에게 쓰기 권한을 부여한다..