장고에 상당히 회의감이 들었던 시간이였다.
ERP , 관리자단에서 가장 핵심적인 부분이, 자유로운 일괄 수정인데....
# 멀티 폼 사용
- POST 방식으로 전달 된 값을 구분해서 받는다. 템플릿 파일에서 submit 에 name 값을 주고, view 에서 name 으로 구분한다.
views.py
# getlist() 로 checkbox 값 읽어오기
# 읽어온 pk 리스트 int 로 변환하기 : map(함수, 적용할 리스트)
# 3항 연산
너무 초보틱해서 3항연산으로 검색해봤다.
# if (chk_iti == '1'):
# chk_iti = 1
# else:
# chk_iti = 0
# 업데이트 방법 개선. bulk_update
for i, item in enumerate(chk_pk_list):
print(i, item)
Item = TourItem.objects.get(id=item)
# Item.share_air_chk = chk_air_list[i]
Item.share_iti_chk = chk_iti
Item.share_air_chk = chk_air
Item.save()
코드가 한 줄로 끝났다. 이건 좀 멋지다.
filter(id__in=[0,1,2,3.....])
# CBV 에서 redirect
return render()
return redirect('tour:item_lv')
return reverse('tour:item_lv') ... 이건 오류 발생하는데, 아후 헷갈려.
하면 할수록 어렵다... 아호...
거의 다 온 것 같긴 한데... 시간이 오래 걸려도 해결하긴 하니까... ㅠ
체크 일괄 삭제, 수정은 # form.is_valid() 초이스 필드 관련 학습 후, cleand_data 로 사용해야한다.
여기까지 꾸역꾸역 구연한 게 어디냐...
이렇게 어려울 줄은 몰랐어.. .증말 증말... 아홍
# 그런데, getlist() 와 cleaned_form() 적용?
하루종일 검색해보다 실패했다.
지원 안된다는 글을 몇 개 봤다.
그리고, formview 부분을 좀 진지하게 공부해야겠다. 하다보면 알아지겠거니 했지만...아니였어. 굉장히 심오하다. ㅠ
forms.form 과 forms.modelform이 다르다...
initial 속성과 choicefield 등... 아호 무지 무지 복잡타.
하튼... 아호 힘들다.
정말 책으로 보는 것과 프로젝트를 해보는 거는 정말 하늘과 땅 차이로다..
class TourItemTable(ListView):
model = TourItem
basiccode = BasicCode.objects.all()
#template_name = "tour/tour_item_list_3.html"
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['form'] = SearchForm
context['basiccode'] = self.basiccode
return context
def post(self, request, *args, **kwargs):
if 'search' in request.POST:
form = SearchForm(request.POST)
if form.is_valid():
.....
context = {
'form':form,
'day_list2':day_list2,
'object_list':tour_item,
'basiccode': self.basiccode,
}
return render(request, self.template_name, context)
if 'chk_delete' in request.POST:
chk_pk_list = request.POST.getlist('chk_pk', None)
# form.is_valid() 초이스 필드 관련 학습 후, 변경하기
chk_pk_list = list(map(int, chk_pk_list))
for item in chk_pk_list:
TourItem.objects.filter(id=item).delete()
# reverse 사용하니, httpresponse 반환해야한다며 오류 발생. redirect 나 render 사용해야함
return redirect('/tour/item_lv/')
if 'chk_modify' in request.POST:
chk_pk_list = request.POST.getlist('chk_pk', None)
chk_iti = request.POST.get('iti_check', None
chk_air = request.POST.get('air_check', None)
# chk_iti = 1 if chk_iti == '1' else chk_iti = 0 3항 연산 에러!!
chk_iti = 1 if chk_iti == '1' else 0
if (chk_air == '1'):
chk_air = 1
else:
chk_air = 0
TourItem.objects.filter(id__in=chk_pk_list).update(share_iti_chk=chk_iti, share_air_chk=chk_air)
'erp 도전' 카테고리의 다른 글
앱시트와 스프레드시트로 여행사 erp 구축 (2) | 2024.12.31 |
---|---|
장고 no such column 에러 (0) | 2023.05.07 |
장고 폼 : 필드 (0) | 2023.05.05 |
forms.py , 체크박스 가로 정렬.. attr, choicefield, multiplechoicefield. (0) | 2023.05.04 |
모델 완전 뜯어 고침 ㅠㅠ (0) | 2023.05.03 |
invalid literal for int() with base 10: b'00:00:00' (0) | 2023.05.02 |
장고 messages.add_message(request, ) (0) | 2023.05.01 |
상품 복사 구현 1)js전체선택, 폼 인풋 리스트 가져오기, 날짜(듀프,요일 체크) (0) | 2023.05.01 |
댓글