Code Kata | Week3 - Day2
·
wecode
문제 문자로 구성된 배열을 input으로 전달하면, 문자를 뒤집어서 return 해주세요. 새로운 배열을 선언하면 안 됩니다. 인자로 받은 배열을 수정해서 만들어주세요. Input: ["h","e","l","l","o"] Output: ["o","l","l","e","h"] 풀이 1 리스트 인덱싱을 이용한 풀이 def reverse_string(s): return s[::-1] 풀이 2 list의 메소드 reverse 사용하기 def reverse_string(s): s.reverse() return s s.reverse()는 s의 순서를 뒤집어주고 None을 반환한다. 풀이 3 파이썬 내장함수 reversed 사용하기 def reverse_string(s): return list(reversed(s))..
Django | Error : you cannot alter to or from M2M fields, or add or remove through= on M2M fields
·
Django
ManyToManyField를 적용하는 모델링 수정을 하고 makemigration -> migrate를 했는데 ValueError: Cannot alter field review.Review.user_bookmarks into review.Review.user_bookmarks - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields) 이런 에러메세지가 떴다. 매니투매니 필드에 through속성을 나중에 추가하거나 지우면 안된다는 뜻 같다. 마이그레이션 파일을 열어보면 아래처럼 작성이 되어 있다. operations = [ migrations.AlterFiel..
DRF | 페이지네이션
·
Django
이렇게 작성한 리뷰 리스트 뷰에 페이지네이션을 적용하려고 한다. class ReviewListCreateAPIView(ListCreateAPIView): queryset = Review.objects.filter(is_active=True).order_by("-created_at") permission_classes = [AllowAny] # 아직 작업중이기때문에 테스트를 위해 AllowAny로 설정 def get_serializer_class(self): if self.request.method == "GET": return serializers.ReviewListSerializer if self.request.method == "POST"..
마이허니트립 | 프로젝트 회고
·
wecode
마이허니트립(myhoneytrip) 마이허니트립 - myhoneytrip 2nd-myhoneytrip.s3-website.ap-northeast-2.amazonaws.com 1. 프로젝트 개요 마이허니트립은 마이리얼트립을 모티브로 허니문 항공권 예약과 관련된 사용자의 소셜 로그인(kakao)과 검색결과 기반 상세페이지, 항공권 예약, 마이페이지까지 이어지는 커머스 사이트의 기본적인 Flow 기능을 구현한 사이트입니다. 짧은 기간 진행하는 프로젝트이기 때문에 허니문 여행전문이라는 컨셉으로 기획을 잡고 허니문 여행지 4곳의 항공권을 예약하는 사이트를 구현했다. 배포 주소 마이허니트립 (클릭!)(요금부과때문에 삭제) 개발 기간 2022.08.01 ~ 2022.08.12 (12일) 개발 인원 프론트엔드 4명, ..
마이허니트립 | 예약목록 api : annotate를 이용한 정렬
·
wecode
마이리얼트립의 내 여행 페이지를 보면 다음과 같이 예약 목록이 나온다. 왕복여행을 예약했으면 같은 예약번호로 가는편 오는편 일정이 편도처럼 따로 뜨고 각각 날짜에 따라서 정렬돼서 뜬다. 필요한건 비행편수 하나당 예약번호, 예약상태, 출발날짜, 출발지, 도착지, 항공사이름, 항공사로고이미지인데 모델링이 이렇게 생겼다. 비행기가 왕복이면 가는편 오는편 둘다 각각 가져와야되고 편도면 하나만 가져와야하는데 티켓에는 인원수 * (가는편+오는편)이 다 있고 가는편 오는편을 따로 보려면 부킹 전체 목록을 가지고 하나씩 확인하면서 승객 테이블에 접근해서 해당 예약 승객 아무나 한명이 가지고 있는 티켓을 확인해서 그 티켓(들)을 이용해서 날짜, 장소, 항공사정보 등을 뽑았어야 했다. 그래서 이걸 각 부킹의 무조건 첫번째..
Django | models : verbose_name
·
Django
verbose name 사람이 알아보기 쉽도록 따로 지정하는 이름 verbose name 지정하기 장고에서 ForeignKey, ManyToManyField OneToOneField를 제외하고 모든 필드 타입에서 첫번째 위치 인자로 verbose name을 지정할 수 있다. 따로 지정하지 않으면 장고에서 자동으로 필드명을 이용해서 verbose name을 만든다.(_가 들어가있다면 띄어쓰기로 바꿔준다) first_name = models.CharField("person's first name", max_length=30) # verbose name: person's first name first_name = models.CharField(max_length=30) # verbose name: first ..
마이허니트립 | 예약 api transaction.atomic() 적용
·
wecode
유저가 예약을 하면 bookings에 레코드가 생성되고 해당 예약에 해당되는 승객이 생기고 각 승객별로 티켓이 생성된다. booking = Booking.objects.create( ... ) passenger_list = [Passenger( ... for passenger in passengers] Passenger.objects.bulk_create(passenger_list) [Ticket.objects.create( ... for passenger in Passenger.objects.filter(booking_id = booking.id) for detail in flight_details] 그래서 순서대로 Booking, Passenger, Ticket객체를 생성하는데 이 과정은 하나의 트랜..
Django | ORM : on_delete=models.CASCADE
·
Django
장고 on_delete=models.CASCADE class Booking(TimeStampModel): ... class Meta: db_table = 'bookings' class Passenger(TimeStampModel): ... booking = models.ForeignKey('Booking', on_delete = models.CASCADE) class Meta: db_table = 'passengers' 장고에서 데이터 모델링을 할때 외래키에 cascade속성을 주면 데이터를 삭제하면 해당 데이터를 외래키로 참조하는 데이터들이 같이 삭제가 된다. In [16]: Booking.objects.all().delete() Out[16]: (2, {'bookings.Passenger': 1, '..
반응형