일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 장고
- django
- 백준
- 함밥
- codetree
- 프로그래머스
- DP
- SQL
- 백트래킹
- 실습
- 동적계획법
- 그리디알고리즘
- 종합설계
- B대면노래방
- 마라마라빔
- minimum spanning tree
- 최소스패닝트리
- Kruskal
- programmers
- 모각코
- 코드트리
- 소프트웨어공학
- DFS
- 알고리즘
- Planned
- 데이터베이스
- 파이썬
- MyPlaylist
- Bellman-Ford
- BFS
- Today
- Total
Leta Learns
Planned | 220513 본문
#경로확인 페이지에 데이터 띄우기
경로 확인 페이지에서는 day랑 order에 따라서 여행 장소들을 띄워줘야 한다. (강릉 같은 지명 말고, 실제 갈 식당이나 관광지 정보들)
이건 place에 해당하는데 이것들은 각각의 order를 갖고 있고, 그 순서대로 띄워줘야 하기 때문에 order에 맞춰서 정렬을 해주었다.
def checkpath(request, pk):
travel = models.Travel.objects.get(pk=pk)
place = models.Place.objects.all().order_by('order')
return render(request, "travels/checkpath.html", {"travel": travel, "place":place})
이렇게 .order_by('order')로 해줌.
그리고 정보를 넘겨줘야 하므로 "place":place도 추가했다.
서버 돌려보니 일단 잘 돌아가긴 한다.
ㅎㅎ 근데 데이터 띄워지는지 fake data 넣고 페이지 돌려봤는데 place 정보가 안 뜬다. 왜죠.
place 정보가 db에 저장이 안 되고 있는 것 같다.
views.py에서 .save() 했는데도 안 되네..
일단 site 하나에 대해서 day랑 order를 둘다 1로 지정하고 데이터 띄워주는 것만 확인하려고 한다.
이렇게 코드를 작성해서 한 번 여행지 추가를 해봤다. (드래그한 부분)
이런 에러가 난다.
위도가 not null인가? 모델을 내가 안 짰더니 헷갈리는 군...
암튼 위도가 not null이면 경도도 not null일테니 둘다 1로 지정해서 서버를 새로고침했다.
실행해보면
에러는 안 나는데 place 정보는 아직도 안 뜸..
#여행지추가 페이지에서 여행장소(site) 여러 개 입력할 수 있도록 만들기
form에 site를 넣어주어서 일단은 지금 site는 하나만 입력할 수 있다.
def createtravel(request): #createtravel함수의 일부
user = request.user
if request.method == "POST":
form = forms.CreateTravelForm(request.POST, request.FILES)
if form.is_valid(): # 유효성 검사
city = form.cleaned_data.get("city") # 여행이름
start_date = form.cleaned_data.get("start_date")
end_date = form.cleaned_data.get("end_date")
lodging = form.cleaned_data.get("lodging")
site = form.cleaned_data.get("site") #이렇게 하나만 입력받을 수 있음
count_date = (end_date - start_date).days + 1
자 이거를,, site 여러 개 입력할 수 있도록 만들어주어야 하는데..
일단 이것저것 시도해야지.
forms.py에서 site를 JSONfield로 바꿔봤다.
#forms.py
class CreateTravelForm(forms.Form):
city = forms.CharField() #여행이름
start_date = forms.DateField()
end_date = forms.DateField()
lodging = forms.CharField()
site = forms.JSONField() #여행지 추가
여행지 추가 페이지로 가보면
어 그래.. 내가 원한 건 이런 게 아닌데... ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
다시 CharField로 바꿔주자. ㅋㅋㅋ
아래 링크 참고해서
https://stackoverflow.com/questions/17159567/how-to-create-a-list-of-fields-in-django-forms
forms.py를 수정하였다.
site 광공이 되었다.
그래도 forms.py 조금만 수정하면 될 것 같은~ 좋은 느낌.
init 함수 안에 city, start_date, end_date, lodging도 넣어놨었는데 그게 회색표시가 뜨길래 함수 밖으로 빼주었다.
그랬더니 됨
물론 아직 site 광공이긴 함.
그래도 다른 것들도 물어보는 조금은 착한 친구가 되었다.
site 개수 세어봤는데 41개다.
city, start_date, end_date, lodging 이 친구들 init 함수 밖으로 빼주기 전에도 site는 41개였는데,
... 왜지?
이유를 알아냄.
선배가 스택오버플로우 코드 따라하면서 for q in questions: 도 따라했으면 아마 지금 등록되어 있는 여행장소가 41개일거라고 했다.
원래 vscode 내부에서 db.sqlite3 를 보면 db가 다 보여야 하는데 지금 현재 Place db(여행장소 저장되는 db)만 안 보인다. 그래서 superuser 만들고 admin 페이지에 들어가서 확인하였다.
41개! 정답이다!
(db.sqlite3에서 place db가 안 보이는 문제는 일단 ... 스킵한다)
음... 일단 여행장소는 5개만 입력할 수 있도록 임의 지정해주었다.
#forms.py
class CreateTravelForm(forms.Form):
def __init__(self, *args, **kwargs):
site = []
sites = Place.objects.all()
super(CreateTravelForm, self).__init__(*args, **kwargs)
counter = 1
# for s in sites: #원래 코드 -> 등록된 site 개수 만큼 입력 칸이 생김
for s in range(5): #여행장소 5개로 임의지정
self.fields['site-' + str(counter)] = forms.CharField(label='site')
counter += 1
city = forms.CharField() #여행이름
start_date = forms.DateField()
end_date = forms.DateField()
lodging = forms.CharField()
평화.
#경로추천 페이지에 데이터 띄우기 (재도전)
여행지 추가 해보려고 데이터 입력하고 경로 추천 눌렀는데
이런 에러가 났는데..
travels_place.name이 뭐지? ...
아무리 봐도 모르겠어서 팀원분한테 sos 침...
views.py에서 print(site)하면 None이라고 뜬다고 한다. site를 못 가져오는 듯.
forms.py 확인해보니 self.fields["site-" + str(counter)] 에서 site로 지정된 게 없어서 그런 것 같다고 하셨다.
... 저녁 먹고 와야겠음.
겨우겨우 책상 앞에 앉았다.
이 문제는 일단 팀원분이 해결해주심
#기존 views.py createtravel 함수
def createtravel(request):
user = request.user
if request.method == "POST":
form = forms.CreateTravelForm(request.POST, request.FILES)
if form.is_valid(): # 유효성 검사
city = form.cleaned_data.get("city") # 여행이름
start_date = form.cleaned_data.get("start_date")
end_date = form.cleaned_data.get("end_date")
lodging = form.cleaned_data.get("lodging")
site = form.cleaned_data.get("site")
count_date = (end_date - start_date).days + 1
new_travel = models.Travel.objects.create(
name=city, start_date=start_date, end_date=end_date, user=user
)
new_place = models.Place.objects.create(
travel=new_travel, name=site, day=1, order=1, latitude=1, longitude=1
)
# 이렇게 수정
def createtravel(request):
user = request.user
if request.method == "POST":
form = forms.CreateTravelForm(request.POST, request.FILES)
if form.is_valid(): # 유효성 검사
city = form.cleaned_data.get("city") # 여행이름
start_date = form.cleaned_data.get("start_date")
end_date = form.cleaned_data.get("end_date")
lodging = form.cleaned_data.get("lodging")
# site = form.cleaned_data.get("site")
count_date = (end_date - start_date).days + 1
new_travel = models.Travel.objects.create(
name=city, start_date=start_date, end_date=end_date, user=user
)
for i in range(1, 6):
site_name = "site-" + str(i)
site = form.cleaned_data.get(site_name)
models.Place.objects.create(
travel=new_travel,
name=site,
day=1,
order=1,
latitude=1,
longitude=1
)
페이지는 잘 뜨는데 아직도 place 정보는 뜨지 않는다.
아 이것저것 해보다가 git 잘못 건드려서 그 뒤로 집중이 안 된다.
내일 해야할 듯... 오래걸리네 .. ㅎㅎ
다음 할 일
- formset 이용해서 forms.py, views.py 수정
- 하고 나서 그 후에 나타날 에러들 해결하기
'HUFS > 종합설계 (캡스톤디자인)' 카테고리의 다른 글
Planned | 220517 (0) | 2022.05.17 |
---|---|
Planned | 220516 (0) | 2022.05.16 |
Planned | 220512 (0) | 2022.05.13 |
Planned | 220511 (0) | 2022.05.12 |
Planned | 220506 (0) | 2022.05.07 |