배경Django에 상품에 카테고리를 지정하려고 했습니다.상품에는 카테고리가 N개 지정이 가능하고 카테고리에서도 상품이 N개 지정 가능한 N:N관계가 만들어집니다처음에 Foreign Key로 만들어서 prefetch를 통해서 원하는 값들을 가져오는 방안을 떠올랐습니다.그러면 상품에서 원하는 카테고리 값들을 가져오고 싶을때 모든 상품에서 해당 카테고리에 속해있는 것을 훑어보는 작업이 필요합니다그러한 이유로 카테고리에도 상품을 참조해야하는데 N:N이면 ManyToMany를 지정해 Django에서 자동으로 pk가 담긴 중간 테이블을 만들어줍니다.그러나 자동으로 만들게 되면 비즈니스 로직 상 좋지 않은 결과를 초래합니다. 예를들어 설정 시각이나 이유(예시입니다)를 적어야 할 시 칼럼 추가가 어렵기 때..
Django/model
배경 사내 코드 중에 명시하지 않았는데 obj를 참조하고 있는 가진 모델을 다루는 코드가 있었다. 이제껏 prefetch로 가져오고 명시해줘서 뭔가 어색했었다. 그런데 쿼리를 가져올 시 prefetch를 사용하지 않으면 모델_set으로 가져오는 방식이 있었다. 그래서 문득 django가 자동으로 관련 테이블을 가져와주는 것인가? 라는 생각에 정리를 하게 되었다. 코드 #comments가 다른 모델의 copmment_obj에 related_name로 설정 되어있음 comment_obj.comments.create( content=content, user=request.user ) 설명 일반적으로 ForeignKey나 OneToOneField와 같은 관계형 필드를 사용하면, Django는 자동으로 해당 모델..
배경 날짜 형식을 받아서 날짜 형식이 맞으면 저장하고 날짜 형식이 맞지 않으면 저장하지 않으려는 코드를 구현하고자 했습니다. 프론트에서 str로 받기 때문에 datetime으로 바꾼 후에 체크해야 하는데 이 점을 잘 알아야 합니다 코드 try: # 시도: '%Y-%m-%d %H:%M:%S' 형식 datetime_object = datetime.strptime(ended_at, '%Y-%m-%d %H:%M:%S') except ValueError: try: # 시도: '%Y-%m-%dT%H:%M:%S' 형식 (ISO 8601) datetime_object = datetime.strptime(ended_at, '%Y-%m-%dT%H:%M:%S') except ValueError: # 어떤 형식에도 맞지 않..