erp 도전22 앱시트와 스프레드시트로 여행사 erp 구축 여행사 홈페이지가 대부분 상품등록과 노출, 디자인에 치중돼있다.쇼핑몰에서 변형한 것이 대부분이다. 그런데, 여행 패키지 상품은 상당히 복잡한 구조를 가진다. 항공권, 호텔 또는 현지 행사비의 특징.상품 한 개가 굉장히 다양한 원가와 상품을 가지고 있다.상품 하나는 쇼핑몰에서 하나의 카테고리와 같은 것인데... 매우 매우 복잡하다. 문제는 홈페이지에 상품을 등록하는 과정과 시간이 매우 오래 걸린다는 것이다.그래서, 엑셀(스프레드시트)로 상품 등록 프로세스를 간소화 자동화하고 싶었는데, 앱의 admin 단의 한계를 극복하고, 스프레드시트로 전처리하는 방안을 구상했다. 그런데, 생각보다 너무나 방대하고 더 복잡한 프로그램이 되버렸다. ㅠ * 가장 큰 문제는 스프레드시트에서는 db 프로그램에서는 기본인 생성.. erp 도전 2024. 12. 31. 장고 no such column 에러 pip install -r requirements 했지만, 계속해서 plugin 을 설치해줘야했다. 서버 실행시, no such table 오류.....로 또 고생했으나, 기록했던 이 블로그로 겨우 해결했다. 임시 해결 1) views.py tour.forms 를 주석 처리. 2) python manage.py migrate --run-syncdb 3) 다시, views.py tour.forms 다시 주석 해제 이유는 모르겠고, 휴....험난한 길이구나. django.db.utils.OperationalError: no such column: tour_touritem.blockitem_fk_id 마이그레이션을 롤백하거나, DB 초기화, run sync_db 뭐 이런 방법으로 다 해결됐었는데... 와 이건.. erp 도전 2023. 5. 7. 장고 폼 : 필드 https://ordinarycoders.com/blog/article/using-django-form-fields-and-widgets https://ordinarycoders.com/blog/article/using-django-form-fields-and-widgets ordinarycoders.com When creating a form using Django, form fields are an essential part of creating the Django Form class. There are over 23 built-in field classes with build-in validations and clean() methods. We will cover commonly used form .. erp 도전 2023. 5. 5. forms.py , 체크박스 가로 정렬.. attr, choicefield, multiplechoicefield. 이거 하나 하고 싶은데.... 이게 그렇게 어렵냐.. forms.ChoiceField() 하면, forms.MultipleChoiceField() 1. 초이스 필드 forms.MultipleChoiceField(widget=forms. 종류) forms.py attrs={class: "form-check check-inline"} attr로는 감싸는 태그까지는 컨트롤 as_p, as_ul, as_table checkbox 의 경우, 이 생성됨. 안에 있는 아이템의 클래스. 즉, 를 줄 수가 없어서, 정렬 불가. --> yoil_form{ '다른인풋':{ "ㅇㅇ":"aa", }, 'yoil':{ "0":"월", "1":"화", ,,,,,,,,,, } } {% for checkbox in yoil_form... erp 도전 2023. 5. 4. 일괄 수정 구현1) : 한 페이지에 멀티폼 구현 장고에 상당히 회의감이 들었던 시간이였다. ERP , 관리자단에서 가장 핵심적인 부분이, 자유로운 일괄 수정인데.... # 멀티 폼 사용 POST 방식으로 전달 된 값을 구분해서 받는다. 템플릿 파일에서 submit 에 name 값을 주고, view 에서 name 으로 구분한다. 수정 views.py if 'search' in request.POST: if 'chk_delete' in request.POST: if 'chk_modify' in request.POST: # getlist() 로 checkbox 값 읽어오기 if 'chk_delete' in request.POST: chk_pk_list = request.POST.getlist('chk_pk', None) # 읽어온 pk 리스트 int 로 변.. erp 도전 2023. 5. 4. 모델 완전 뜯어 고침 ㅠㅠ 모델 메소드에서 @property를 왜 쓰는지 확실히 알게됨. 문제가 될 것 같긴 했는데, 역시나 문제가 됐었다. 휴.. 핵심 부분을 건드리니, 고칠게 꽤 많았다. ㅠ 확실한건 계산이 필요한 것들은 모델에 메서드로 등록하고, @propery 데코레이션을 이용해서, 연산을 쉽게 할 수 있었다. 이거 안고쳤으면 진도 못나갈뻔.. 공유일정 , 저장된 일정 로직도 빨리 바꿔야 하는데...ㅠ def __str__(self): return self.item_code @property def item_no(self): day_code = self.d_date1.strftime("%m%d") basiccode_fk = self.basiccode_fk.name air_code = self.air_code code_suf.. erp 도전 2023. 5. 3. invalid literal for int() with base 10: b'00:00:00' 치명적인 DB 설계 실책으로, 다시 구성하던 차에.... 아 놔... 이건 뭐냐. 형변환 관련 오류였는데, 흠... 모델을 변경하면서 발생했으니 모델에서 이유를 찾아야겠지. 좀 어이없었지만, 기존 레코드가 있는 상태에서, time 타입 필드를 생성했고, 기본값을 설정해서 00 00 으로 들어가있었는데, 이걸 다시 date 필드로 바꿨더니 발생한 문제였다. 아 놔 해당 필드에 저장된 값을 쏴악 지워서, 해결했다. erp 도전 2023. 5. 2. 장고 messages.add_message(request, ) https://newbiecs.tistory.com/258 Django - messages 활용 from django.contrib import messages 를 활용는 방법을 알아보겠습니다. messages에는 기본적으로 들어있는 값들이 있습니다. 자세한 설명은 아래 블로그에 자세히 나와있습니다. https://ssungkang.tistory.com/entry newbiecs.tistory.com 대수롭지 않게 생각했는데, 좋은 걸? 와웃. erp 도전 2023. 5. 1. 상품 복사 구현 1)js전체선택, 폼 인풋 리스트 가져오기, 날짜(듀프,요일 체크) 일정표 공유 기능에 이어서, 상품 복사 기능을 구현하기로 했다. 사실 이게 여행 ERP 의 핵심일 것이다. 1/1 3박5일 다낭 상품을 앞으로 1년 동안 복사한다. 근데, 이 상품은 주 2회 매주 목, 일만 운항한다. 요런 식이다. 목요일은 3박5일, 일요일은 4박6일이라면, 1. 목요일, 일요일 대표 상품을 만든다. 2. 복사할 원본상품을 클릭해서, 지정한 기간 동안 상품을 반복한다. ( --> 반복할 요일 input 받아서, list 로 만들기 ) 3. 이미 해당날짜에 같은 상품이 있을 경우 처리. ( --> 기 등록된 날짜 list 로 만들기) - 덮어쓸지? (지우고, 생성) - 통과할지 그렇게 복잡한 로직은 아닌데, 이게 장고로 하니까 상당히 복잡하고, 뇌에 마비가 자주 왔다. ㅠㅠ 대표 일정 복.. erp 도전 2023. 5. 1. 주화입마에 빠져서, 기본기 다지기를 병행하기로 지금까지는 사례 부디치면서 익혀나가는 방식이였는데, 이제 체계적으로 정리해야겠다. 넘 괴로버서 -_-;; 기출 문제부터 풀다가, 이론 강의 보는 격이랄까. 필요없다 생각해서 쓱 읽고 지나갔던 대표적인 것들.... from django.http import HttpResponse from django.shortcuts import render from django.contrib import messages # 원형: 템플릿 없이, 반환 # def index(request): # return HttpResponse('바디') def index(request): qs = [i for i in range(9) if i%2 == 0] dict = {k:v for k,v in enumerate(qs)} messag.. erp 도전 2023. 4. 28. dispatch 메서드: self.get_object() , self.object 이 키워드로 검색하는 사람들은 장고 클래스뷰 하다가, 주화입마에 빠져들고 있는 사람일 것이다. 중간 결론 CreateView, UpdateView, FormView 등에서 모델 폼을 사용할 때, get 인 경우, get_context_data() 오버라이딩 post 면, form_valid() 공통인 경우, dispatch() 오버 https://github.com/django/django/blob/main/django/views/generic/edit.py GitHub - django/django: The Web framework for perfectionists with deadlines. The Web framework for perfectionists with deadlines. - GitHub .. erp 도전 2023. 4. 27. 일정표 구현 4) 수정/삭제 ------------------------------------------ 하튼, 일정표 수정/삭제 작업 후, 원래 위치로 돌아와야 하는데, 좀 애매한 경우가 있었다. 수정/삭제 작업 1. 저장된 일정 * 일정이 나(상품번호 touritem의 pk) 를 가리키고 있다. 그래서, 수정/삭제 후, redirect 하면 된다. 공유 일정은 다른 상품들과 연동돼있으므로, 같은 곳에서 수정하면 사실 문제가 있다. 바로 수정/삭제 보다는 공유 일정표 수정화면을 만들어서 처리해야할 것이다. 하지만 귀찮고, 기타 등등 잘 가다듬으면 한 곳에서 쉽게 처리할 수 있을 것 같다. 2. 공유 일정 공유 일정은 나를 가리키고 있지 않기 때문에, 공유일정을 수정/삭제 하고, 원래 페이지로 돌아갈 수는 없다. 한참 생각하다가, .. erp 도전 2023. 4. 26. 레코드 복사, 반복문 추가, bulk_update 등 https://django-orm-cookbook-ko.readthedocs.io/en/latest/copy.html 2. 기존에 저장된 행을 복사해 새로 저장하는 방법은 무엇인가요? — Django ORM Cookbook 2.0 documentation 2. 기존에 저장된 행을 복사해 새로 저장하는 방법은 무엇인가요? 장고 ORM에는 모델 인스턴스를 복사하는 내장 메서드가 없습니다. 하지만 모든 필드의 값을 복사하여 새 인스턴스를 만들고 새 django-orm-cookbook-ko.readthedocs.io save 와 create save 는 조회(인스턴스 생성)후, 저장 create 는 바로 만들어. 레코드 복사 장고 ORM에는 모델 인스턴스를 복사하는 내장 메서드가 없습니다. 하지만 모든 필드의 .. erp 도전 2023. 4. 26. 장고 마이그레이션 에러 / 복구 showmigrations 1. 먼저 터미널에서 다음 명령어를 입력하여 migration현황을 확인한다 python manage.py showmigrations 그럼 다음과 같이 app들에 대해 진행된 migration목록이 나열된다. account [X] 0001_initial [ ] 0002_newuser account : app name [X] : 이미 migrate 되어 적용됐다는 뜻 [ ] : 아직 migrate가 진행되지 않았다는 뜻 1-1. [ ] 로 아직 migrate가 진행되지 않은 경우 앱 내부에 있는 migrations 폴더에 들어가서 삭제하고자 하는 migrations 파일을 전부 삭제해주자 1-2. [X]로 이미 migrate가 반영된 경우 돌아가고자 하는 상태로 migrate 후, python manage.. erp 도전 2023. 4. 26. 일정표 구현 3: 조/중/석 구분값으로 저장, 사용하기 * 미션 일정표 관련 기능을 구현하면서, 자잘한 데이터를 사용할 일이 많아지게 됐다. 예를 들어, 다단 박스 형태에서, 조식, 중식, 석식이라면, 1일차에 조식/중식/석식이 들어가면 되는거다. 구체화 현재 출발일 상품(touritem)의 일정표(iti) 를 보여준다. 단, 일정표(iti) 모델의 food 필드는 '조식;중식;석식' 처럼 세미콜론으로 구분해서 저장돼 있다. * 구분값으로 저장 구분값을 사용해서, 한 필드에 여러값 저장하고, 문자열을 입력 받을 때, join 함수로 ; 으로 연결해서 저장하기. (이 때, strip 으로 공백을 제거하자.) 꺼내서 사용하기. 복잡타 ㅠㅠ 이거 밤까먹는거냐. 1. 원래 간단히, 댓글 모델을 생각했었다. 템플릿에서 바로 프로세싱하는 거였다. {% if tourit.. erp 도전 2023. 4. 25. 일정표 구현2) : 공유 일정표와 개별 일정표 구현 # 뭔가 복잡하고 두려워서,,,피하고 싶은데, 끙 한 개의 필드에 코드를 넣어서 구현하는 방식이 그나마 가장 간단한 방식이겠으나... 제대로 구현하면, 일자마다 일정, 식사, 주요 관광거리 등의 요소들이 들어가야 한다. 즉, 일정표 하루치가 무지 복잡해지는거다. 작업이 꽤 커짐 그리고, 각 일차는 상품코드와 fk 로 연결돼 있어야 하고, 댓글 모델과 비슷하다. 근데, 이걸 1년 치 일정을 복사한다 치면, 와.... db 추가/수정 양이 엄청 많네. bulk_create , update 를 안쓸수가 없겠구먼... 뭔가 생각만으로도 좀 복잡하다..... 상품이 먼저 추가되고, 거기에 딸린 일정이 fk 로 일자마다 연속추가되는 형태인데, 끙...몰라 몰라.... 생각만으로도 복잡해. 이건 좀 나중으로 미뤄야겠.. erp 도전 2023. 4. 24. 일정표 구현 1) tinymce 에디터는 있어야해서, 간단히 넣으려고 했는데 좀 삽질했다. 하란대로 따라하면 admin 에서 글 입력까진 쉽게 됐었다. 내가 만든 폼의 textarea 에서 잘 안먹혔는데, {% form.media %} 를 추가해야지 로드가 됐다. -_-; 일정표 작업중인데 고민중이여서 두가지 다 구현해보기로 했다. 1. 하나의 상품의 textarea 필드 하나로 처리 글 초기값. / 양식 불러오기 setting initial text 기존 게시판에 글 하나 형식이라면, 기본 값으로 사전 정의된 테이블이 있어야겠다. 검색해보니, 있었다. https://www.tiny.cloud/blog/how-to-get-content-and-set-content-in-tinymce/ How to get content from the.. erp 도전 2023. 4. 24. 장고 필터 django-filter https://velog.io/@suasue/Django-%ED%95%84%ED%84%B0%EB%A7%81-%EB%BD%80%EA%B0%9C%EA%B8%B0-if%EB%AC%B8-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC-Q-%EA%B0%9D%EC%B2%B4-%ED%99%9C%EC%9A%A9 Django | 필터링 뽀개기! if문, 딕셔너리, Q 객체 활용 장고에서 필터링 기능을 구현할 수 있는 방법에는 크게 3가지 방법이 있다. if문을 이용하는 방법, 딕셔너리를 이용하는 방법, Q 객체를 이용하는 방법이다. 오늘의 집을 예시로 해서 3가지 방법 velog.io https://velog.io/@adsf25/Django-%EB%8B%A4%EC%A4%91-%ED%95%84%ED%84.. erp 도전 2023. 4. 22. 데이터 조회 : 특정 기간동안 + 코드 조회(Q, annotate, Concat) Q 객체로 구현했고, # filter 시, 포린키의 value 조회 방법 # annotate, Concat 으로 필드 결합 1) 특정 기간 : Q(d_date1__range=[start, end] 2) 여러 필드를 하나의 문자열로 합친 후, '검색어'가 포함돼있는지 조회. ............annotate(xxx = Concat('a__name', 'b', 'c')).............. 상품기초코드 + 항공사코드 + 접미코드 필드를 합쳐서, '키워드'가 들어있는지? 포린키의 실제 필드값을 조회 : 'basic_code__basic_code' from django.db.models.functions import Concat from django.db.models import CharField, V.. erp 도전 2023. 4. 22. table2 테이블 모듈 erp 처럼 테이블을 많이 사용할 때, 유용 테이블 태그를 꼭 써야 할지는 모르겠다. 일단, 날짜나 시간 등. 탬플릿 필터에서 설정한 것들을 새로 해야하고, 디자인이라면.. 또 별도의 방식을 익혀야 한다. 글쎄. 지금 단계에선 안쓰는 것이 옳다. erp 도전 2023. 4. 22. 장고 여행사 재고관리 도전 1 (4/14-4/20) 지금까지 꾸역 꾸역 답보고 문제 푸는 것처럼, 실습은 했지만 효과가 너무나 미약했기에, 가장 작은 프로젝트라도 만들어 보기로 했다. 결론부터 말하자면, 정말 이게 답이였다. 1일차 4/14 : 기존 실습한 파일을 변형해서 만들어보기로. 뭔가 만들려고 하니까, 그냥 가슴이.... 답답.....해지면서, 소화불량.... 허억... 사실 블로그야 연습용이지, 많고 좋은 블로그 속에, 장고로 블로그 만들어서 어디 써먹겠나. 그럴듯한 인벤토리, CRM, ERP 디자인을 찾아 헤매다 몇 시간 지나갔다. 이게 뭐람. -_-;; 이런 짓 하지 말고, 디자인 빼고, 이것부터 해보기로 했다. 2023-5-1 부터 2020-8-31 까지, 수, 토 주 2회 패턴으로 뜨는 동남아 항공편이 있다. 이 정보를 일괄 입력하고, 수.. erp 도전 2023. 4. 21. 장고 ... 재도전 ( 2023. 3.26 ~ 4.13 ) 묙표 이번엔 대충 빨리 해보자 No. 토이 프로젝트라도 할 수 있는 수준으로 학습하자. 지금까지 예제는 참 많이 했다만, 사실, 거의 복붙하거나, 따라 치기만 했었다. 세 가지 책을 병행했다. 병행했다기보다는 그냥 대충 복/붙 따라 해보는 정도. 왜 자꾸 장고를 쉽다고 하는거냐... 아호. 1. (김석훈) 파이썬 웹프로그래밍 (기본/실전) 2. Do It 장고 부트스트랩 3. 점프투장고 파이썬 문법 실력은 버벅버벅대고, 클래스, 딕셔너리 조작은 헷갈려하고, 머리 아파하는 상태. 그래서, 이번엔 좀 제대로 보기로 했다. 책을 따라했을 때, 결과물로서 가장 나은 Do It 장고 부트스트랩을 좀 더 꼼꼼히 보기로 했다. 이번엔 코드를 출력해서, 자주 더 꼼꼼히 살펴보면서 하려고 신경썼다. 가상환경 설정하고, .. erp 도전 2023. 4. 21. 이전 1 다음