목표 : 아이디와 날짜를 받아 일치하는 데이터들의 합계를 구하기
자세히 설명하면,
보시는 것처럼 링크에 id와 날짜 문자열이 입력되면 그 값을 받아서
MySQL의 DB 중 user_idx컬럼의 값이 id인 zenna와 같고, date컬럼의 값이 날짜(date)인 '2022-04-14'와 같은 데이터를 고릅니다.
zenna는 2022-04-14에 데이터를 두 번 등록했네요. 딕트의 dang은 4+0=4, dan은 8.74+41.8= 50.54 니까 딕트에는
{'dang' : 4, 'dan' : 50.54} 식으로 추가가 되겠네요.
파이썬 작업 코드는 views.py에 작성합니다.
필요한 것들을 먼저 import해주겠습니다.
MySQL의 DB는 'diet'라는 테이블에 저장되어 있습니다. 따라서 테이블을 불러오고,
Sum기능을 사용해 필터링 된 정보의 합계값을 구해주려 합니다.
에구.. 코드가 굉장히 길어보이지만, 다 같은내용이라는걸 금방 눈치챌 수 있을거예요.
for 문을 쓰거나 해서 반복되는 내용은 정리하고 싶었는데, 컬럼명이 달라서 어려움이 있었네요.
더 좋은 방법이 있으신 분은 댓글 남겨주세요!
설명하면 첫번째 줄에서는 diet 테이블에서 filter(date=date), filter(user_idx=idx)로 필터링을 합니다. 그리고 'tan' (탄수화물을 의미하고 싶었어요) 컬럼의 데이터를 전부 더해서(Sum) dict로 만들어 주었어요.
이 내용은 아래 블로그를 많이 참고했습니다.
http://raccoonyy.github.io/django-annotate-and-aggregate-like-as-excel/
출력해보면 아래처럼 dict타입으로 생성되었죠?
이제 같은 방식으로 다른 컬럼들의 합계값도 딕트에 추가해줄거예요. 'sums' 딕트에 값을 추가 (update)해주면 끝납니다.
출력을 해볼까요?
이런식으로 각 컬럼의 합계값이 딕트에 추가된 것을 확인할 수 있어요.
이 sums딕트를 html로 보내기 위해 context라는 딕트에 sums를 넣어주고, context를 html에 보내줍니다.
context딕트에 굳이 넣은 후 보내주는 이유는, 이 데이터만 html로 보내는 것이 아니라 다른 여러 정보들도 보내려 하기 때문이에요. 제 코드에서는 index.html이라는 파일로 보내주었어요.
이제 index.html에서 받은 값을 화면에 띄워줘야 합니다.
context 딕트에서 키값이 sums인 또 다른 딕트의 tan__sum 값을 받아오는 형태가 되니 코드는 아래처럼 입력하면 됩니다.
그럼 웹사이트 화면에서는 아래처럼 나옵니다. 성공 ^0^
'Python > Django' 카테고리의 다른 글
[django] 장고에서 return 지정하기 (1) | 2022.05.04 |
---|---|
django - 이미지 파일 업로드하고 html 불러오기 (0) | 2022.04.21 |
Django -url정리하기 (0) | 2022.04.13 |
장고(django)-이미지 파일 올리고 관리 (0) | 2022.04.11 |
Django로 웹사이트 만들기 (0) | 2022.03.16 |
댓글