일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- B대면노래방
- 알고리즘
- MyPlaylist
- 최소스패닝트리
- 종합설계
- Bellman-Ford
- 백준
- 데이터베이스
- Kruskal
- 모각코
- 장고
- DFS
- 코드트리
- BFS
- Planned
- 소프트웨어공학
- 프로그래머스
- DP
- 함밥
- programmers
- 파이썬
- minimum spanning tree
- 마라마라빔
- codetree
- 백트래킹
- 그리디알고리즘
- SQL
- 실습
- 동적계획법
- django
- Today
- Total
Leta Learns
Planned | 220525 본문
#회원가입 기능 에러 해결
에러까지는 아니고.. 그냥 잘 되던 회원가입이 갑자기 안 됐었다.
확인해보니 프론트 맡으신 분이 이것저것 하시다가 html에서 비밀번호 확인란을 지우셔서 발생한 일이었다.
signup.html에서 비밀번호 확인 창을 다시 띄워주니 해결되었다.
(password1: 비밀번호 확인 object)
<div class="form-group">
{{form.password1}}
</div>
#여행지 삭제 기능
delete는 쉽게 구현했다.
view, url, html 파일 만져서 구현 완료. 커밋도 완료.
formset 사용한 place는 반복문 사용해서 개체 하나하나를 delete 해주었다.
def deletetravel(request, pk):
travel = get_object_or_404(models.Travel, pk=pk)
lodging = models.Lodging.objects.get(travel=pk)
places = []
for p in models.Place.objects.filter(travel=pk):
places.append(p)
travel.delete()
lodging.delete()
for p in places: #이런 식으로
p.delete()
return redirect("core")
수정도 이렇게 하면 할 수 있을 거 같은데.. 왜 안 되냐고요. ㅠ
#여행지 수정 기능
자꾸 이런 에러가 났었다.
NoReverseMatch 에러는 많이 해결해본 에러인데 왜 이리 해결이 안 되나 했더니 core.html에서 update.html을 불러올 때 이미 travel.id 값을 가지고 왔는데 update.html의 form에서 action으로 또 travel.id를 가지고 오려 했기 때문이었다.
아래 글 참고하였다.
https://integer-ji.tistory.com/128
{% extends 'base.html' %}
{% block page_title %}여행지 수정{% endblock page_title %}
{% block content %}
<h1>여행지 수정</h1>
<form action="{%url 'travels:updatetravel' travel.id %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<h4>여행 이름: </h4>
<input type="text" name="travel" value=“{{travel.name}}”>
<br>
<h4>숙소 이름: </h4>
<input type="text" name="lodging" value=“{{lodging.name}}”>
<br>
<button>취소</button>
<input type="submit" value="저장">
</form>
{% endblock %}
이 코드를
{% extends 'base.html' %}
{% block page_title %}여행지 수정{% endblock page_title %}
{% block content %}
<h1>여행지 수정</h1>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<h4>여행 이름: </h4>
<input type="text" name="travel" value=“{{travel.name}}”>
<br>
<h4>숙소 이름: </h4>
<input type="text" name="lodging" value=“{{lodging.name}}”>
<br>
<button>취소</button>
<input type="submit" value="저장">
</form>
{% endblock %}
이렇게 바꿔주었다. (4번째 줄 form 태그에서 action 삭제)
이거 고쳐서 이제 updatetravel 페이지는 잘 뜬다.
수정 언제쯤 감을 잡으려나... ㅇㅁㅇ
#여행일자에 맞춰 리스트 생성하기
여행을 3일 간다면, 3개의 리스트를 생성하여 여행 장소들을 저장해주어야 한다. 그래야 여행지 확인 페이지에서 띄울 때 용이하기 때문이다.
그래서 def checktravel 함수를 수정중이었다.
def checktravel(request, pk):
travel = get_object_or_404(models.Travel, pk=pk)
lodging = models.Lodging.objects.get(travel=pk)
places = []
for p in models.Place.objects.filter(travel=pk):
places.append(p)
count_date = (travel.end_date - travel.start_date).days + 1
chk_day = [[]]*count_date
print(chk_day)
print(places)
for i in places:
# if len(chk_day[i.day-1]) == 0:
print(i.day)
print(i)
chk_day[i.day-1].append(i)
print(chk_day)
return render(
request,
"travels/checktravel.html",
{"travel": travel, "lodging": lodging, "places": places},
)
지금은 이와 같은 코드이다. (진행중)
데이터들을 확인하기 위해서 print를 하면서 보고 있었다.
근데 chk_day[i.day-1].append(i) 에서 인덱싱이 안 먹히는지 의도한 대로 되지 않는다.
예를 들어, 곰탕집은 3일차 여행지이므로 chk_day[2]에 들어가야 한다. 그런데 모든 인덱스에 다 들어가고 있는 것을 볼 수 있다...
해결함!
위 사진 86번 줄에서 chk_day 리스트를 만들 때 빈 리스트를 count_date 개수만큼 곱해주는 방식으로 만들었다.
이렇게 하면 빈 리스트 하나를 네 번 곱한 것이 된다. 그래서 하나의 인덱스에 하나의 개체를 넣으면 그 개체가 결국 네 번 곱해진 게 chk_day라서 전체 인덱스에 다 들어간 것처럼 보이는 것이었다.
chk_day = [[]]*count_date #하나의 빈 리스트를 count_date의 수 만큼 곱한 것
chk_day = [[] for _ in range(count_date)] #빈 리스트를 count_date 개수만큼 만든 것
지금보니 chk_day = [[]]*count_date 코드는 아주 이상하다... [[]*count_date] 이게 더 맞는 것 같기도.. 아닌가.. 어쨌든 틀린 방식이니 넘어간다.
chk_day = [[] for _ in range(count_date)] 이렇게 해주면
해당 인덱스에만 잘 들어간다!
...음 근데 이걸 어떻게 html에 띄우지 모델을 만들어야 하나.. 뭔가 잘못한 것 같은 느낌이 든다.
'HUFS > 종합설계 (캡스톤디자인)' 카테고리의 다른 글
Planned | 220603 (0) | 2022.06.04 |
---|---|
Planned | 220526 (0) | 2022.05.26 |
Planned | 220522 (0) | 2022.05.22 |
Planned | 220518 (0) | 2022.05.19 |
Planned | 220517 (0) | 2022.05.17 |