Leta Learns

Planned | 220513 본문

HUFS/종합설계 (캡스톤디자인)

Planned | 220513

leta 2022. 5. 14. 00:51

 

#경로확인 페이지에 데이터 띄우기

경로 확인 페이지에서는 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 하나만 입력 가능

 

자 이거를,, 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

 

How to create a list of fields in django forms

Is there any way to make a django forms class that actually holds an array of fields? I have a database that will pull up a variable number of questions to ask the user and each question will know...

stackoverflow.com

 

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
Comments