게으른 과거의 나를 미워하며 과거의 한 일을 다시 복기해서 쓰는 내용(1)
1. addressapp의 CRUD기능을 추가했다.(CR을 제외한 다른 부분)
배송지 부분을 기획하며 배송지 목록을 보여주며 동시에 Form으로 생성도 가능하게 하고 싶었다. 따라서 이전에 Create부분을 만들었으니 FormMixin으로 List를 뿌리고 동시에 Form을 던졌다.
또, 배송지 목록에서 선택을 통해
특정한 배송지를 기본 배송지로 설정 또는 삭제 할 수 있게 하고 싶었다. 해당 부분은 jQuery를 이용해 선택된(checked) DOM을 얻고 value(PK)를 view로 넘겨 처리했다.
addressapp/view.py
def set_default_address(request, case):
# 기존에 기본 주소로 설정되어 있는 레코드 탐색
before_object = UserAddress.objects.filter(target_user=request.user, is_default=True)
if before_object: # 탐색된 레코드가 있다면
if case == 'create': # 새로운 배송지 추가시
if request.POST.get('is_default', None) == 'checked': # 기본 주소 설정 체크박스가 체크되었다면
before_object.update(is_default=False) # 해당 레코드의 기본 주소 설정 값을 False로 변경하고 True 반환
return True
else:
return False
elif case == 'update': # 기존 배송지 중 기본 배송지로 변경하는 경우
target_object = UserAddress.objects.filter(pk=request.POST.get('address_pk'))
before_object.update(is_default=False)
target_object.update(is_default=True)
else:
return True # 탐색된 레코드가 없다면(최초 등록의 경우) True 반환
요약 :
1. addressapp의 list에서 FormMixin을 상속받아 list에서 create할 수 있도록 수정
2. addressapp의 기본 배송지 설정 로직 추가
3. addressapp의 배송지 삭제 로직 추가
1. Query를 낭비하지 않는가?
여담으로
addressapp에 배송지를 수정하는(Update)는 구현하지 않을 생각이다. (귀찮) 나는 여지껏 인터넷 쇼핑하며 배송지를 수정해본적이 없따... 뭐 그래서...