본문 바로가기
관리자

Programming-[Backend]/Django

(56)
[TIL] DjangoFilter(DRF filter_bakcends, django-filter filterset_class) Django 및 Django Rest Framework(DRF)의 Filter 기능에 대한 간략한 정리 1. DRF - filter_backends DRF를 이용하여 viewset을 사용하면 상속받는 ModelViewSet
[탐험] Django admin에서 view, template, render 다루기. 비동기 처리 버튼 만들기 1. 목표 Django admin 페이지로 어떤 파일들을 모아서 압축 파일을 생성하는 비동기 작업이 완료되면, 그것들을 다운로드 받을 수 있는 페이지 제작 2. 구조 3. 구조 설명 3-1. django admin django admin은 모델을 생성하고 admin에 등록하면, admin 주소로 들어오는 요청을 보낼 수 있는 FORM과 화면을 구성하는 TEMPLATE을 간단히 만들 수 있도록 해준다. @admin.register로 admin에 모델을 등록하고 get_urls로 path와 일치하는 요청이 들어왔을 때 특정 view로 가서 로직을 처리하게 할 수 있다. meta_data로 app_label값과 model_name값을 불러와서 view의 name을 동적으로 만들어줄 수 있다. 이 name값은 ..
[TIL] django data migration 데이터 마이그레이션 https://simpleisbetterthancomplex.com/tutorial/2017/09/26/how-to-create-django-data-migrations.html 데이터베이스의 Schema를 변경하는게 아니라 data들을 조작할 수 있는 것을 Data Migrations라 한다. 새로운 필드를 추가하고 그 값을 넣고 싶으면 models.py에서 해당 필드를 null=True를 주거나 default값을 주고 schema변경 마이그레이션 적용 → data migration → null=False로 변경하는 순서를 적용해야한다. 빈 마이그레이션 파일을 만들고, 원하는 함수를 작성한 뒤 migrations.RunPython()안에 함수명을 적어주면 적용된다. def **slugify_title*..
[TIL] FloatField, DecimalField 차이점 / 위경도 표시 소수점과 거리값 Django의 Serializer에서 정의하는, 소수점 값을 사용할 수 있는 필드는 FloatField와 DecimalField가 있다. 결론적으로는 아래 참조에 나와있듯이 해당 필드를 이용해서 계산이 필요한 경우는 DecimalField를 사용하는 것이 좋다. DecimalField - str 기반이다. '126.123541231'로 표시된다. coerce_to_string = False로 옵션을 적용하면 decimal 타입으로 표시할 수 있다. - max_length, decimal_places 옵션을 통해 최대 길이와 소수점 자리수를 지정할 수 있다. 기타 상세한 내용은 참조 링크 ref) 스택오버플로우 https://stackoverflow.com/questions/2569015/django-fl..
[TIL] Django prefetch_related, Prefetch 2depth, 모델 필드 정보 조회 prefetch_related prefetch_related 구문으로 1:N 관계에서 1 -> N 으로 접근하여 데이터들을 한 번에 fetch(eager_loading)할 수 있다. Company : Team = 1 : N, Team: Color = 1:1 인 경우라면, 아래와 같이 prefetch 구문을 적용하면 된다. Prefetch class는 prefetch_related 구문을 더 상세히 사용할 수 있게 해준다. "team_set" : Company 모델에서 Team 모델을 참조하기 위한 related_name이다. models.py에서 따로 지정하지 않았다면 "{이름}_set"으로 자동으로 설정된다. 이름 찾는법은 아래 모델 필드 정보 조회 섹션에서 확인할 수 있다. queryset : tea..
[TIL] django.conf settings, 환경 설정 정보 상대 참조하기 보통 Django 에서 설정 파일은 base.py -> local.py, development.py 등으로 상속하여 사용하는 구조이다. 그런데 이 설정 파일들의 값을 참조할 때, 직접 from settings.base import {SOMETHING} 으로 하면 안된다. 환경에 따라 값을 자동으로 상대 참조할 수 있도록 from django.conf import settings 로 settings를 참조한 뒤 값을 사용해야한다. 직접 Import 시 참조 정보가 잘못될 수 있다. 이후 다음과 같이 settings.SOMETHING 으로 사용하면 된다.
[TIL] Django ORM values, annotate, Subquery, OuterRef, JSONField, Type Cast 부분 적용 자세한 내용은 Django 공식 문서에 있다. 여기서는 기존 다른 SQL에서 자주 사용하는 기능들을 한 눈에 대략적으로 파악할 수 있도록만 정리한다. Django 공식 문서 - Queryset https://docs.djangoproject.com/en/4.1/ref/models/querysets/ 코드 User.objects .annotate( user_name=F("name"), comment_file_path=Subquery( Comment.objects.annotate(file_path=F("data__file_path")) .values("data__file_path") .filter(user=OuterRef("pk"))[:1] ), ) .values("user_name", "comment_fi..
[TIL] 부모 Serializer field 값 제거 부모의 field값을 제거하기 기존 View가 ParentSerializer을 사용해서 응답 필드값들을 내보내고 있었는데, 기존과 다르게 재사용하다보니 unnecessary_id=null로 불필요하게 클라이언트에게 전달되는 상황. 해당 ParentSerializer를 ChildSerializer로 한 번 더 감싸고, __init__ 메서드에서 self.fields로 unnecessary_id 값을 제거함 class ChildSerializer( ParentSerializer ): def __init__(self, *args, **kwargs): """ pop unnecessary_id """ super(ChildSerializer, self).__init__( *args, **kwargs ) self.f..