본문 바로가기

IT CHANNEL/Python11

[Django] refresh_from_db() : 메모리 상의 Django 객체와 데이터베이스 동기화하기 refresh_from_db() 를 이용해 데이터를 동기화 시키는 방법을 알아보고자 한다. 어떤 비즈니스 로직과 그에 대한 트랜잭션이 있다. 비즈니스 로직은 반드시 필요한 것이고 그 뒤에 데이터 값 변경이 보장되어야한다. refresh_from_db()란 refresh_from_db() 는 Django의 Model 클래스에서 제공하는 Django 근본 메서드 라고 할수있겠다. 메모리에 로드된 모델 인스턴스의 필드 값과 데이터베이스의 값은 다를 수 있다는 것을 알아야한다. 실제 코드로 보는 예시 @action(methods=["PUT"], detail=True, serializer_class=ProjectSerializer, permission_classes=[]) def restart(self, requ.. 2023. 10. 6.
[Django] webp ,바이트 스트림(Byte Stream) 개념과 이미지 webp 형식으로 변환하기 webp라는 파일이 어떤 것 인지 최근에 알게되어 프로젝트를 진행하며 사용했던 개념을 기록한다 메인페이지에서 이미지를 여러개 뿌려주는 부분이 있다. 고품질의 PNG이미지를 여러개 사용하다보니 로딩하는데 살짝 버벅이는 느낌이 있었다.(아주 미세하지만 로딩이 느린 것 같음) 진행하던 프로젝트 기획 상 특정 페이지의 이미지 파일 업로드는 백오피스에서만 이뤄지고 다운로드는 하지 않기 때문에 파일 용량을 낮추는 것이 좋다고 생각했다. 이미지 포맷 중 하나인 webp는 고품질의 이미지를 상대적으로 작은 파일 크기로 저장할 수 있다. 이 글에서는 업로드된 이미지를 업로드(저장)할 때 webp포맷으로 자동 변환했던 것을 기록한다. webp 변환을 위한 Pillow 라이브러리 설치 pip install Pillow dj.. 2023. 9. 1.
[Django] data 순서 필드(row number)를 위한 ORM(Window expression),admin에서 cached queryset 구현 다음과 같은 상황이 있다 게시물 리스트 api 가 필요하다.(pagination 적용) 데이터 기본 정렬 규칙은 최신데이터 순이다. 앞단에서 데이터 옆에 번호가 보여져야 한다. 사실 여기까지만 필요하다고 하면, 페이지네이션과 결합해 프론트만으로도 구현이 가능하지 않을까 싶었다. 백오피스(django admin)에서 해당 모델의 각 데이터 옆에 똑같은 순서로 번호가 보여져야 한다. 데이터에 제약조건들이 있다.(여러가지가 있지만 편의상 노출/비노출 여부 만 적용) 데이터 순서 부여에 대한 의견. 리스트형태의 api에서는 restful한 개발을 위해 id를 포함해서 데이터를 내려주는 것이 좋다고 생각하지만 기본적으로 존재하는 id(pk) 외에 데이터의 번호를 부여해야 상황이 생겼다. id는 데이터가 생성됨에 .. 2023. 8. 20.
[Django] Admin에서 JS를 활용해 동적으로 연관 필드 업데이트하기(데이터 동적 변경) Django Admin에서 html template를 커스텀해 JS를 사용하는 방법을 알아보려고 한다. 간단한 ERD와 요구사항은 다음과 같다. 요구사항 Django admin에서 Data 생성 시, 외래키로 2개의 데이터를 설정해야 한다. B 외래키를 설정함에 있어서 A외래키의 영향을 받아 동적으로 변경되어 보여져야 한다. 시도한 방법 Django.jquery를 사용하는 방법 경로설정과 세팅에 대한 공수가 커 비효율적이다. admin inner template 활용 django admin 에서 add, change 등의 상황마다 template이 내장되어있다. Admin Class 내에서 커스텀 하기 용이한 함수도 있기에 효율적이라고 판단했다. 해결 방법 1. Admin 클래스에서 필요한 데이터 로드 .. 2023. 8. 19.